Scala中=和:=的区别是什么?



Scala中=:=的区别是什么?

我已经在谷歌上广泛搜索了"scala冒号-等号",但没有找到任何明确的

=在scala中是实际的赋值操作符——它做一些特定的事情,在大多数情况下你无法控制,比如

  • 创建valvar时给出一个值
  • 修改var的值
  • 更改类中字段的值
  • 创建类型别名
  • 可能别人

:=不是一个内置操作符——任何人都可以重载它并定义它的任何含义。人们喜欢使用:=的原因是因为它看起来非常赋值,并且在其他语言中用作赋值操作符。

所以,如果你试图找出:=在你正在使用的特定库中的含义…我的建议是通过Scaladocs(如果存在的话)查找名为:=的方法。

from Martin Odersky:

  • 最初,我们有冒号= 用于赋值(就像在Pascal、Modula和ada中一样)和单个等号表示相等。很多编程理论家会认为这是正确的做法。赋值不等于相等,因此应该使用不同的符号来赋值。但后来我和一些来自Java的人进行了尝试。我得到的反应是,"嗯,这看起来是一门有趣的语言。但是为什么要写冒号= 呢?这是什么?"我在帕斯卡里解释过。他们说:"现在我明白了,但我不明白你为什么坚持要这么做。"然后我意识到这不是我们想要坚持的事情。我们不想说,"我们有一个更好的语言,因为我们用冒号等号代替等号来赋值。"这完全是一个次要的问题,人们可以习惯这两种方法。所以我们决定在这些小事情上不与惯例作斗争,当我们确实想在其他地方有所作为时

选自The Goals of Scala’s Design

=执行赋值。:=在标准库或语言规范中没有定义。如果您愿意,其他库或您的代码可以免费使用该名称。

Scala允许操作符重载,您可以像编写方法一样定义操作符的行为。

和其他语言一样,=是一个赋值操作符。

这不是一个标准的操作符,我知道叫做:=,但可以用这个名字定义一个。如果您看到这样的操作符,您应该检查您正在查看的文档,或者搜索定义该操作符的位置。

使用Scala操作符可以做很多事情。实际上,您可以用任何您喜欢的字符创建一个操作符。

相关内容

  • 没有找到相关文章

最新更新