加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala是否强类型?

发布时间:2020-12-16 18:02:07 所属栏目:安全 来源:网络整理
导读:Scala是否强类型?您是否有示例如何在语言类型系统中反映出来? Scala是否允许类型惩罚?它是否允许强制? Scala是否有ML这样的多型? 谢谢! 解决方法 是的. 由于强类型,它不允许“打字”,因为我知道它在C语言中使用.但是,您有子类型,因此如果A:B(A是B的子
> 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}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读