gpt4 book ai didi

scala - 为什么 Scala 在这种特殊情况下无法找到次要隐式值?

转载 作者:行者123 更新时间:2023-12-02 23:45:27 24 4
gpt4 key购买 nike

我很难解释之间的行为差​​异通过主要隐式值或隐式值寻求附加隐式值隐式转换。具体来说,这有效:

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 以将此作为附加示例。

关于scala - 为什么 Scala 在这种特殊情况下无法找到次要隐式值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9138312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com