=和:=在Scala中有什么区别?

=:=在Scala中有什么区别?

我已经广泛search“scala colon-equals”,但是找不到任何明确的。

=在斯卡拉是实际的赋值运算符 – 它做了一些特定的事情,大部分你没有控制,如

  • 在创build时给valvar一个值
  • 更改var的值
  • 改变一个类的字段的值
  • 制作一个types别名
  • 可能是别人

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

所以,如果你想找出什么:=在你使用的特定库中的意思…我的build议是通过Scaladocs(如果存在)看一个名为:=的方法。

来自Martin Odersky:

  • 最初,我们拥有分配的冒号 –就像在Pascal,Modula和Ada中一样 – 一个等号表示相等。 很多编程理论家会认为这是正确的做法。 赋值不是平等的,因此你应该使用不同的符号来赋值。 但后来我和一些来自Java的人一起试了一下。 我得到的反应是,“这看起来像一个有趣的语言,但你为什么要写冒号平等 ?它是什么? 我解释说,就像帕斯卡那样。 他们说:“现在我明白了,但我不明白你为什么坚持这样做。” 然后我意识到这不是我们想坚持的事情。 我们不想说,“我们有更好的语言,因为我们写作冒号等于而不是等于分配。” 这是一个小问题,人们可以习惯这两种方法之一。 所以我们决定不要在这些小事上打仗,当时还有其他地方我们想要有所作为

从斯卡拉devise的目标

Scala允许运算符重载,您可以像定义方法一样定义运算符的行为。

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

这是没有标准的运营商,我知道叫:= ,但可以定义一个这个名字。 如果你看到这样一个操作符,你应该检查你正在查看的任何文档,或者search这个操作符被定义的位置。

Scala运营商可以做很多事情。 你几乎可以使任何你喜欢的angular色的操作员。

=执行分配。 :=未在标准库或语言规范中定义。 如果你愿意的话,这个名字对其他库或你的代码是免费的。