【发布时间】:2015-11-28 17:28:32
【问题描述】:
我试图了解编译器在这种情况下的行为
object ImplicitTest extends App {
def foo[T](implicit x: (String => T)): T = ???
implicit val bar = (x: String) => x.toInt
foo
}
上面的代码无法编译并给出以下错误:
不明确的隐含值:对象 Predef 中的两个方法 $conforms 在类型为 ⇒ String ⇒ 的对象 ImplicitTest 中键入 [A]⇒ <: bar int string t>
正如错误所说,我的隐式值与 Predef 中定义的另一个隐式冲突...基于此,似乎无法将隐式参数声明给将值从已知类型转换为未知类型的函数(通用) 类型。
这是由于编译器的一些技术限制,还是只是它应该工作的方式,并且我违反了一些我不知道的限制?
【问题讨论】: