在我添加隐式排序证据之前,类型推断在此示例中运行良好。类型推断规则(从左到右和跨参数列表)似乎得到了满足,但是关于隐式的某些东西会破坏它。
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
类型是推断出来的,但是当隐式解析发生时,它认为它是 Nothing,换句话说,它认为它好像我没有Int
在val result: Int
. 它是一个错误吗?