4

斯卡拉 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

第二个隐式是隐藏第一个。为什么有人猜测,您可能会为此打开一个问题(在验证之前没有报告过这个问题之后),但这可能只是将扳手扔进类型推断工作的那些事情之一。

于 2011-11-04T23:22:26.493 回答