簡體   English   中英

為什么scala編譯器在重載並且具有泛型類型參數時無法找到隱式參數值/轉換?

[英]Why does scala compiler fail to find implicit parameter value/conversion when it is an overload and has generic type param?

Scala 2.8.1

采用以下類層次結構

abstract class A

class B extends A

class C extends A

為什么scala編譯器在下面發送B實例時無法找到send的隱式參數

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

第二個隱含的是遮蔽第一個。 為什么有人在猜測,你可能會為它打開一個問題(在驗證之前沒有報告之后),但它可能只是將扳手引入類型推斷的工作之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM