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

scala – 像=一样的字符串隐式转换列表

请考虑以下代码段. =不是 java.lang.String的成员,所以我猜有某种隐式转换正在进行中.如何查找作用于String的此类预定义隐式转换的列表?

scala> var x = "asdf"
x: java.lang.String = asdf

scala> x += x

scala> x
res2: java.lang.String = asdfasdf

解决方法

你选了一个特别糟糕的例子.在某种意义上,=是String的一部分.有关java.lang.String的Javadoc,请参阅此注释:

The Java language provides special support for the string
concatenation operator ( + ),and for conversion of other objects to
strings.

您将不得不查找Java language specification以查找有关它的更多信息(15.18.1).但是,再一次,Scala不是Java,所以也是Scala language specification(12.3.1)的一部分.

到目前为止,我已经谈过,而不是=.但是,Scala有一个特殊的语法糖用于分配.如第6.12.4节所述,除了< =,> =,!=和以=开头的运算符之外,如果以等号结尾的任何运算符符号(请参阅第1章中的“运算符字符”)将被重新解释,如果它不作为一种方法存在.特别,

x += 1

将被重新解释为

x = x + 1

无论x是否为var,都会发生这种情况,因此有时可能会看到错误消息“重新分配给val”.

因此,正如您所看到的,=实际上是String的一部分,通过Scala规范中复制的Java规范中的异常,加上一些语法糖.

这并不意味着没有java.lang.String中没有的方法可以通过隐式转换与它一起使用.不过,我会把它留给其他答案.如果我是你,我会改变问题中的方法,使其正确.此外,= Stack Overflow中无法搜索.

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

相关推荐