Scala 特性 : val/def and require
tintown
阅读:12
2024-09-07 23:24:14
评论:0
以下代码抛出 IllegalArgumentException
:
trait T{
val x: Long
require(x > 0)
}
object T extends App{
val y = new T{ val x = 42L }
}
而以下没有:
trait T{
def x(): Long
require(x() > 0)
}
object T extends App{
val y = new T{ def x() = 42L }
}
这是为什么?什么时候
require()
叫?为什么是
val
甚至在那个时候定义?
请您参考如下方法:
因为 def
声明一个方法,由编译器放在类中,所以一编译就存在。为了返回一些东西,一个方法必须运行到它实际返回一些东西的地方,所以在你的第二个例子中没有问题。val
声明一个“不可变值”,尽管它仍然需要初始化,在此之前它保存其类型的默认值 - 在这种情况下为 0。此初始化发生在 trait T
的构造函数之后。运行,除非您更改示例以使用早期初始化:
val y = new { val x = 42L } with T
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。