加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么scala编译器在重载并且具有泛型类型参数时无法找到隐式参

发布时间:2020-12-16 08:47:50 所属栏目:安全 来源:网络整理
导读:Scala 2.8.1 采用以下类层次结构 abstract class Aclass B extends Aclass C extends A 为什么scala编译器在下面发送B实例时无法找到send的隐式参数 implicit def routingKeyFor[T : A](value: T) = value.getClass.getSimpleNameimplicit def routingKeyFor
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

解决方法

第二个隐含的是遮蔽第一个.为什么有人在猜测,你可能会为它打开一个问题(在验证之前没有报告之后),但它可能只是将扳手引入类型推断的工作之一.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读