scala – 隐式转换的结果类型必须比AnyRef更具体

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(",")

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...