scala - 自引用值

标签 scala

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

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 - 自引用值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11273273/

相关文章:

scala - 用为其成员设置的值实例化案例类

scala - Scala 中的一个奇怪的 NullPointerException

arrays - scala 中令人难以置信的隐式数组转换

scala - ScalaTest 测试用例中,ScalikeJDBC 不会连接到 NamedDB 进行 DSL 查询

java - 如何从 Java 调用在 Scala 包对象上定义的方法? (斯卡拉 2.10.x)

java - IntelliJ : scala: javac: invalid source release: 1. 7

scala - 为什么 Scala 在与 @ 进行模式匹配时不推断类型参数

scala - 使用仅适用于较旧 Scala 版本的 Scala 库

scala - MapPartitions 上的垃圾收集问题

java - scala 是否比 java 快,因为两者都在 JVM 上运行?