【发布时间】:2014-12-14 09:39:27
【问题描述】:
在我添加隐式排序证据之前,类型推断在此示例中运行良好。类型推断规则(从左到右和跨参数列表)似乎得到了满足,但是关于隐式的某些东西会破坏它。
case class Insert[I, O : Ordering](arg: I)
def execute[I,O](req: Insert[I,O]): O = null.asInstanceOf[O]
val result: Int = execute(Insert("test"))
Error:(5, 39) diverging implicit expansion for type Ordering[O]
starting with method Tuple9 in object Ordering
lazy val result: Int = execute(Insert("test"));}
^
这编译和工作正常:
case class Insert[I, O](arg: I)
def execute[I,O](req: Insert[I,O]): O = null.asInstanceOf[O]
val result: Int = execute(Insert("test"))
因此,任何一种类型推断都不足以进行隐式解析,或者隐式解析会破坏类型推断。
我猜O 类型是推断出来的,但是当隐式解析发生时,它认为它是无,换句话说,它认为它好像我没有在val result: Int 中指定Int。是bug吗?
【问题讨论】:
标签: scala type-inference typeclass implicits