让
def h(a: AnyRef*) = a.mkString(",") h: (a: AnyRef*)String
所以
h("1","2") res: String = 1,2
但是,h(1,2)
error: the result type of an implicit conversion must be more specific than AnyRef h(1,2) ^ error: the result type of an implicit conversion must be more specific than AnyRef h(1,2) ^
这至少在Scala 2.11.1和2.11.1中.
询问解决方法.
解决方法
您可以使用以下方式重现问题:
val x: AnyRef = 42
这是相关的pull request on github介绍的变化
理由是为了安全起见,一些隐式转换被明确禁用,即当转换从T到U被禁用:
T <: Null
要么
AnyRef <: U
在你的具体情况下,这意味着Int(这不是AnyRef)永远不会被转换为AnyRef.
如果您需要同时接受Int和String,您可以考虑接受Any.由于每个Scala对象从Any继承,所以不需要隐式转换.
def h(a: Any*) = a.mkString(",")