Почему компилятор scala не может найти неявное значение / преобразование параметра, когда он перегружен и имеет универсальный тип param? - PullRequest
4 голосов
/ 05 ноября 2011

Scala 2.8.1

Возьмите следующую иерархию классов

abstract class A

class B extends A

class C extends A

Почему компилятор scala не может найти неявный параметр для send при отправке экземпляра 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

1 Ответ

3 голосов
/ 05 ноября 2011

Второй неявный - это слежение за первым. Почему кто-то догадывается, и вы можете открыть для него проблему (после проверки того, что об этом раньше не сообщалось), но это может быть просто одна из тех вещей, которые бросают гаечный ключ в произведения вывода типов.

...