如果我写:
trait T {
val t = 3
val u = 1::t::Nil
}
class U extends T {
override val t = 2
}
(new U).u
Run Code Online (Sandbox Code Playgroud)
它显示了这一点.
List(1, 0)
Run Code Online (Sandbox Code Playgroud)
我应该如何更改上面的代码,使其显示以下内容:
List(1, 2)
Run Code Online (Sandbox Code Playgroud)
即override val t设置特征中tfor 的值?uT
Den*_* R. 12
一种方法是u通过使用def或lazy val如下延迟评估:
trait T {
def t = 3
def u = 1::t::Nil
}
class U extends T {
override def t = 2
}
(new U).u
Run Code Online (Sandbox Code Playgroud)
要么
trait T {
val t = 3
lazy val u = 1::t::Nil
}
class U extends T {
override val t = 2
}
(new U).u
Run Code Online (Sandbox Code Playgroud)
差异如下:
val 在初始化期间进行表达式求值def使表达式评估每个时间u用于lazy val使其在首次u使用时进行评估并缓存结果Ste*_*man 10
尝试使用早期初始化程序:
scala> trait T {
| val t = 3
| val u = 1::t::Nil
| }
defined trait T
scala> class U extends {
| override val t = 2;
| } with T
defined class U
scala> (new U).u
res1: List[Int] = List(1, 2)
Run Code Online (Sandbox Code Playgroud)
有关早期初始化的更多信息,请参见此处.
| 归档时间: |
|
| 查看次数: |
4703 次 |
| 最近记录: |