“Scala编程”第10章中的Element示例是否存在循环依赖问题?

时间:2010-05-28 18:26:10

标签: scala

在“Scala编程”的第10章第10章中,Element的定义定义了一个函数/方法“above”,它返回一个新的ArrayElement。但是ArrayElement扩展了Element。

在尝试输入示例时,我实际上得到了我所期望的......关于这些定义的循环依赖性的抱怨。

我错过了什么?

3 个答案:

答案 0 :(得分:4)

在这种情况下,循环定义不是问题,因为返回类型不是循环的,并且可以在解析类型后的第二遍中解析实现。

例如 - 并注意我将所有内容包装在一个对象中,以便REPL一次性考虑所有内容:

object Example {
  abstract class E {
    def a: Int
    def e: E = new AE(2)
  }
  class AE(val a: Int) extends E { }
}

这可以按预期工作:

scala> val ae = new Example.AE(0)
ae: Example.AE = Example$AE@57240e

scala> ae.a
res1: Int = 0

scala> ae.e.a
res2: Int = 2

我的猜测是,当你输入时,你试图让REPL只接受循环定义的 part ,或者你遗漏了允许循环的东西要在类型中解决(例如,如果您将回复键入AbstractElement而不是Element,那将会令人困惑!)。

无论如何,代码原样对我来说没问题。

答案 1 :(得分:1)

我相信您应该已经生效了第196页的ArrayElement定义。

答案 2 :(得分:1)

你可以像这样包装源文件中的所有内容:

layout {      
... code goes here...   
}

然后在REPL中你可以:加载[你的文件]并执行

layout.Element.elem("bla bla bla")