試圖神交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