试图神交this评论,我写了下面的代码:解释这种类型不匹配的懒惰评价
def breakfast : AnyRef = {
class Chicken (e: =>Egg) {
lazy val offspring = e
}
class Egg (c: =>Chicken) {
lazy val mother = c
}
lazy val (egg: Egg, chicken: Chicken) = (new Egg(chicken),
new Chicken(egg))
egg
}
和它的作品,它不正是你希望它会做什么。我没有得到的是,为什么: AnyRef
是必要的?如果它没有包括,编译器(至少2.8编译器)死一个可怕的死亡:
error: type mismatch; found : Egg(in lazy value scala_repl_value) where type Egg(in lazy value scala_repl_value) <: java.lang.Object with ScalaObject{lazy def mother: Chicken} required: (some other)Egg(in lazy value scala_repl_value) forSome { type (some other)Egg(in lazy value scala_repl_value) <: java.lang.Object with ScalaObject{lazy def mother: Chicken}; type Chicken <: java.lang.Object with ScalaObject{lazy def offspring: (some other)Egg(in lazy value scala_repl_value)} } object RequestResult$line16$object {
有人能解释这是怎么回事呢?
权,但我认为这是一个编译器的bug 2.8。 –
我与你@KiptonBarros。最简单的情况,'def a = {class Local;新的本地}',工作;下一个最简单的例子,'def a = {class Local;返回新的本地},我认为它应该完全等价,不。 – Malvolio
@Malvolio。结合返回类型的缺少类型推断不是一个错误,请参阅此问题以获取更多信息:[类型方法返回类型推论](http://stackoverflow.com/questions/2209179/type-inference-on-method -return-type) – sschaef