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

为什么Scala在这个特定情况下找不到二级隐含值?

发布时间:2020-12-16 08:57:08 所属栏目:安全 来源:网络整理
导读:我很难解释两者之间的行为差??异 由主要隐含值或者主要隐含值寻求的其他隐含值 隐式转换.具体来说,这有效: trait Foo[A]implicit def fooString: Foo[String] = nullimplicit def value[A](implicit foo: Foo[A]) = 5 implicitly[Int]5 但这不是: implicit
我很难解释两者之间的行为差??异
由主要隐含值或者主要隐含值寻求的其他隐含值
隐式转换.具体来说,这有效:

trait Foo[A]
implicit def fooString: Foo[String] = null

implicit def value[A](implicit foo: Foo[A]) = 5

> implicitly[Int]
5

但这不是:

implicit def conversion[A](x: Int)(implicit foo: Foo[A]) = new {
    def aMethod = 5
}

> 1.aMethod
could not find implicit value for parameter foo: test.Foo[A]

变化:

>是通过隐式转换还是隐式转换来启动搜索
>所寻求的次要隐含值是否是多态的
>提供的辅助隐式值是否是多态的

我得到以下结果:

Conversion/value  Searching for  Supplied | Works?
----------------  -------------  -------- | ------
     conversion     poly          poly    |  yes
     conversion     poly          mono    |  **no**
     conversion     mono          poly    |  yes
     conversion     mono          mono    |  yes
     value          poly          poly    |  yes
     value          poly          mono    |  yes
     value          mono          poly    |  yes
     value          mono          mono    |  yes

如您所见,唯一不起作用的情况是搜索开始时
通过隐式转换,所寻求的值是多态的,但价值
提供的是单形的.

是否存在理论上的原因,或者这是一个理由
Scala的错误/限制?

解决方法

你被scalac bug SI-3346咬了.更一般地看到 SI-4699的描述,特别是.第(1)点,

1) implicit search and implicit conversion search treat undetermined type parameters differently

您正在直接观察您的案例区分隐含值和隐式转换的位置.

我已经更新了SI-3346,将其作为一个额外的例子.

(编辑:李大同)

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

    推荐文章
      热点阅读