पाशन स्काला में निम्न कोड पर विचार करें में हुई:क्यों इन निहित रूपांतरण कोड
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)
}
}
कोड पाशन में implicits परिणामों के उपयोग। वास्तव में, disassemblying का पता चलता है, उत्पन्न कि रूपांतरण तरीकों केवल एक goto 0
अंदर है:
public Test$AI AtoAI(Test$A);
Code:
0: goto 0
public Test$BI BtoBI(Test$B);
Code:
0: goto 0
क्या है कि व्यवहार का कारण बनता है? मैं समझता हूं कि यहां कक्षाओं का पदानुक्रम एक संदिग्ध है, लेकिन निहित रूपांतरण केवल एक बार लागू किया जाना चाहिए।
मैं स्काला 2.9.1
मुझे समझ में नहीं आ रहा है कि कोड बिल्कुल क्यों संकलित करता है (मैंने सत्यापित किया है कि यह * संकलित करता है)। क्या आपको अंतर्निहित रूपांतरण विधि के अंदर डाउनकास्ट नहीं करना पड़ेगा? – ziggystar
असल में, मैं न तो। यह कोड के एक बड़े हिस्से से अलग मामला है। –