为什么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 如您所见,唯一不起作用的情况是搜索开始时 是否存在理论上的原因,或者这是一个理由 解决方法
你被scalac bug
SI-3346咬了.更一般地看到
SI-4699的描述,特别是.第(1)点,
您正在直接观察您的案例区分隐含值和隐式转换的位置. 我已经更新了SI-3346,将其作为一个额外的例子. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |