scala之自引用值

qlqwjy 阅读:17 2024-11-01 17:39:52 评论:0

我遇到了一个值初始化问题:

class Top  
 
class X(val v : Top) extends Top  
class Y extends Top  

X 是使用其他 Top 类型对象构造的类,例如 X 或 Y。这意味着它可以使用自身构造。例如,

val x = new X(x)  

编译器可以工作,但是当我访问 v 字段时,返回的是 null。

scala> x.v  
res9: Top = null  

我尝试了惰性初始化和按名称参数,得到了相同的结果。我的 Scala 版本是 2.9.1。谁能帮帮我?

请您参考如下方法:

你的代码是如何使用 lazy 和 call-by-name 的?它像这样对我有用:

class Top 
class X(_v: => Top) extends Top { 
  lazy val v = _v 
} 
 
scala> lazy val x: X = new X(x) 
x: X = <lazy> 
 
scala> x.v 
res3: Top = X@422d15ad 


标签:Scala
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号