为什么以下代码打印为null,而不是" Test?
trait Testa {
val loginurl:String
def fun
val x=fun
}
class Testc extends Testa {
val loginurl="test"
def fun={
println(loginurl)
1
}
}
object TestTrait extends App{
val m=new Testc()
}
答案 0 :(得分:3)
变量x
初始化为属于Testa
的特征的一部分。那时,您的Testc
尚未在范围内,因此无法使用其中定义的方法fun
。但是变量已经绑定到该方法。因此,调用Testc
时不会打印任何内容。
顺便说一下,如果您将x
的定义从val x = fun
更改为lazy val x = fun
,然后在创建对象m
后调用此变量,那么您就是&#39 ;看到"测试"印刷(一次)。但是,x的类型仍然是" Unit",因为它是在基本特征中定义的。
trait Testa {
val loginurl:String
def fun
lazy val x=fun
}
class Testc extends Testa {
val loginurl="test"
def fun={
println(loginurl)
1
}
}
scala> val testc = new Testc
testc: Testc = Testc@4106db23
scala> val testcx = testc.x
test
testcx: Unit = ()
scala> val testcx2 = testc.x
testcx2: Unit = ()