我讀斯卡拉在由Joshua D. Suereth深度,並在跨階約隱含的觀點下面的代碼來了:隱意見
def bar(x : Bar) = println("bar")
爲什麼以下工作:
val f = new Foo{}
bar(f) // print "bar"
但
bar(new Foo{})
會導致編譯器給類型不匹配錯誤:
error: type mismatch;
found : java.lang.Object with test.Foo
required: test.Bar
bar(new Foo {})
^
我無法解釋爲什麼,但是bar(new Foo {})'確實可以工作,如果你在'Bar'而不是'Foo'的伴隨對象中定義了隱式轉換。 –
有趣。這也編譯:'bar(new Foo {}:Foo)'。 –