微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐