Aşağıdaki kodu düşünün. Tabii kiKesin Subimplicits
implicit val b: A = new B
bu hatayı artıracaktır. Neden foo
neden örtük'u seçer ve örtük a
? Veya daha genel: Neyin seçileceğine dair kurallar neler?
DÜZENLEME: Ben açıklamak istiyorum
nedeniyle Ivan ile benim comment-konuşma için: Yerel örtülü Val kapalı yöntem parametresi olarak aynı şekilde adlandırılmış eğer Sorumun cevabını bilemez.
def bar(implicit a: A) = {
implicit val a = new B
foo
}
sonra sadece yerel
val a
aynı adı çünkü yöntem parametre alanı-geçersiz olduğu konular arasındadır.
[Nerede Scala implicits için görünüyor?] Olası yinelenen (http://stackoverflow.com/questions/5598085/where-does-scala-look-for-implicits) –
Ayrıca bkz: http: // eed3si9n.com/implicit-parameter-precedence-again (bu sorudan bağlantılı). –