をループの結果:なぜこれらの暗黙的な変換は、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)
}
}
コードをループで暗黙の使用の結果。実際には、disassemblyingは明らかに、変換方法を生成し、その内部にのみ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
コードがすべてでコンパイル、なぜ私が理解することはできませんが(私はそれは* *コンパイルないことを確認し)。暗黙的な変換方法の中でダウンキャストする必要はありませんか? – ziggystar
実際、私もどちらも。これは、コードの大部分から分離されたケースです。 –