请考虑以下代码段. =不是
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 举报,一经查实,本站将立刻删除。