【发布时间】:2012-01-13 10:57:29
【问题描述】:
考虑 Scala 中的以下代码:
object Test {
class A {}
class B extends A {}
class AI extends A {
def sayHello: String = "Hello from AI"
}
implicit def AtoAI(a: A): AI = a
class BI extends B {
def sayHello: String = "Hello from BI"
}
implicit def BtoBI(b: B): BI = b
def main(args: Array[String]) {
val a = new A
println(a.sayHello)
val b = new B
println(b.sayHello)
}
}
使用隐式会导致代码循环。其实反汇编发现,生成的转换方法里面只有一个goto 0:
public Test$AI AtoAI(Test$A);
Code:
0: goto 0
public Test$BI BtoBI(Test$B);
Code:
0: goto 0
是什么导致了这种行为?我知道,这里的类层次结构是可疑的,但隐式转换应该只应用一次。
我使用 Scala 2.9.1
【问题讨论】:
-
我不明白为什么代码会编译(我验证它确实编译)。难道你不用在隐式转换方法中向下转换吗?
-
其实我也没有。这是与大部分代码隔离的情况。