Scala是否强类型?

前端之家收集整理的这篇文章主要介绍了Scala是否强类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
> Scala是否强类型?您是否有示例如何在语言类型系统中反映出来? Scala是否允许类型惩罚?它是否允许强制?
> Scala是否有ML这样的多型?

谢谢!

解决方法

>是的.

由于强类型,它不允许“打字”,因为我知道它在C语言中使用.但是,您有子类型,因此如果A<:B(A是B的子类型或更具体的B类型),您可以安全地使用类型A的值,其中请求类型B的值. 您可以使用a.asInstanceOf [B]强制类型,但是这将在运行时进行类型检查,如果a不是B的子类型,则会引发异常,但高级类型除外在JVM上擦除,这意味着只有在引用类型参数的实际值时才会抛出此类异常. 另一个例外是结构类型,可以被认为是“双关语”,虽然类型安全:

// ordinary type
trait Foo {
  def bar: Int
}

 // structural type
type Bar = Any {
  def bar: Int
}

def test(b: Bar) = b.bar

test(new Foo { val bar = 1234 })  // allowed

这被认为是一种很少使用的高级功能,甚至可能在将来的Scala版本中被弃用.它需要运行时反射,因此会带来性能损失.

你也可以使用特殊的Dynamic trait放弃静态类型系统.或者你可以做疯狂的东西using macros来实现你自己的惩罚.

>不知道,不是ML专家.但是如果polytype只是意味着this,那么这看起来像普通的高级(参数化)类型或“泛型”,答案是肯定的.

>示例:标识函数:def标识[A](x:A):A = x>示例:单一类型参数:特征选项[A] {def get:A}

猜你在找的Scala相关文章