Scala中=
和:=
的区别是什么?
我已经在谷歌上广泛搜索了"scala冒号-等号",但没有找到任何明确的
=
在scala中是实际的赋值操作符——它做一些特定的事情,在大多数情况下你无法控制,比如
- 创建
val
或var
时给出一个值 - 修改
var
的值 - 更改类中字段的值
- 创建类型别名
- 可能别人
:=
不是一个内置操作符——任何人都可以重载它并定义它的任何含义。人们喜欢使用:=
的原因是因为它看起来非常赋值,并且在其他语言中用作赋值操作符。
所以,如果你试图找出:=
在你正在使用的特定库中的含义…我的建议是通过Scaladocs(如果存在的话)查找名为:=
的方法。
from Martin Odersky:
- 最初,我们有冒号= 用于赋值(就像在Pascal、Modula和ada中一样)和单个等号表示相等。很多编程理论家会认为这是正确的做法。赋值不等于相等,因此应该使用不同的符号来赋值。但后来我和一些来自Java的人进行了尝试。我得到的反应是,"嗯,这看起来是一门有趣的语言。但是为什么要写冒号= 呢?这是什么?"我在帕斯卡里解释过。他们说:"现在我明白了,但我不明白你为什么坚持要这么做。"然后我意识到这不是我们想要坚持的事情。我们不想说,"我们有一个更好的语言,因为我们用冒号等号代替等号来赋值。"这完全是一个次要的问题,人们可以习惯这两种方法。所以我们决定在这些小事情上不与惯例作斗争,当我们确实想在其他地方有所作为时。
选自The Goals of Scala’s Design
=
执行赋值。:=
在标准库或语言规范中没有定义。如果您愿意,其他库或您的代码可以免费使用该名称。
Scala允许操作符重载,您可以像编写方法一样定义操作符的行为。
和其他语言一样,=
是一个赋值操作符。
这不是一个标准的操作符,我知道叫做:=
,但可以用这个名字定义一个。如果您看到这样的操作符,您应该检查您正在查看的文档,或者搜索定义该操作符的位置。
使用Scala操作符可以做很多事情。实际上,您可以用任何您喜欢的字符创建一个操作符。