: Test nedenleri içindeScala örtük dönüştürme sorunu
trait A {
def send(s: String): String = {
println(s)
s
}
}
object X {
implicit def toB(a: A): B = new B(a)
class B(a: A) {
def <<(s: String): String = a send s
}
}
object Y {
implicit def toB(a: A): B = new B(a)
class B(a: A) {
}
}
object Test extends App {
import X._
import Y._
val a: A = new A {}
a << "Test"
}
son deyimi derleme hatası: Ben den import Y._
kaldırmak Ancak
error: value << is not a member of A
a << "Test"
Test, iyi derler.
Gerçek kodda hem X.B hem de Y.B'nin bir Java kütüphanesi için Scala DSL'nin bir parçası olduğunu ve hem aynı derleme biriminde kullanabilmeyi unutmayın.
Ve beklediğiniz şey budur. Java'da statik bir ithalat gibi. Eğer örtülü yöntemi “toB (a)” olarak çağırdıysanız, derleyici hangisinin daha sonra diğerini geçersiz kılmadığını kastettiğini nasıl anlardı? OP, 'AtoXB' ve 'AtoYB' gibi örtük kusur isimlerini vermeli, XB' ve Y.B' gibi farklı sınıflardır. –
Gerçekten de, örtülü yöntem adlarının soruna neden olmasını beklemiyordum. Yeniden adlandırdım ve şimdi iyi çalışıyor, teşekkürler! – elk