4

Scala 2.8.1

次のクラス階層を取得します

abstract class A

class B extends A

class C extends A

以下sendのインスタンスを送信するときに、scalaコンパイラが暗黙のパラメータを見つけられないのはなぜですかB

implicit def routingKeyFor[T <: A](value: T) =
  value.getClass.getSimpleName

implicit def routingKeyFor(value: C) = "custom C"

def send[T <: A](value: T)(implicit createRoutingKey: T => String):
Validation[Throwable, String] = Success(createRoutingKey(value))

val resultOfSendingB = send(new B)
val resultOfSendingC = send(new C)

routingKeyForの汎用バージョンの名前が変更されたときに、コンパイラが暗黙的なパラメータの値を見つけることができるのはなぜですか?

implicit def someOtherName[T <: A](value: T) = 
  value.getClass.getSimpleName
4

1 に答える 1

3

2 番目の暗黙的なものは、最初のものをシャドーイングしています。なぜ誰かが推測するのか、(これが以前に報告されていないことを確認した後) 問題を開く可能性がありますが、型推論の作業にスパナを投げ込むものの 1 つにすぎない可能性があります。

于 2011-11-04T23:22:26.493 に答える