=和:=在Scala中有什么区别?
=
和:=
在Scala中有什么区别?
我已经广泛search“scala colon-equals”,但是找不到任何明确的。
=
在斯卡拉是实际的赋值运算符 – 它做了一些特定的事情,大部分你没有控制,如
- 在创build时给
val
或var
一个值 - 更改
var
的值 - 改变一个类的字段的值
- 制作一个types别名
- 可能是别人
:=
不是一个内置的操作符 – 任何人都可以重载它,并将其定义为任何他们喜欢的。 人们喜欢使用:=
的原因是因为它看起来非常有用,并在其他语言中用作赋值运算符。
所以,如果你想找出什么:=
在你使用的特定库中的意思…我的build议是通过Scaladocs(如果存在)看一个名为:=
的方法。
来自Martin Odersky:
- 最初,我们拥有分配的冒号 –就像在Pascal,Modula和Ada中一样 – 一个等号表示相等。 很多编程理论家会认为这是正确的做法。 赋值不是平等的,因此你应该使用不同的符号来赋值。 但后来我和一些来自Java的人一起试了一下。 我得到的反应是,“这看起来像一个有趣的语言,但你为什么要写冒号平等 ?它是什么? 我解释说,就像帕斯卡那样。 他们说:“现在我明白了,但我不明白你为什么坚持这样做。” 然后我意识到这不是我们想坚持的事情。 我们不想说,“我们有更好的语言,因为我们写作冒号等于而不是等于分配。” 这是一个小问题,人们可以习惯这两种方法之一。 所以我们决定不要在这些小事上打仗,当时还有其他地方我们想要有所作为 。
从斯卡拉devise的目标
Scala允许运算符重载,您可以像定义方法一样定义运算符的行为。
和其他语言一样, =
是一个赋值操作符。
这是没有标准的运营商,我知道叫:=
,但可以定义一个这个名字。 如果你看到这样一个操作符,你应该检查你正在查看的任何文档,或者search这个操作符被定义的位置。
Scala运营商可以做很多事情。 你几乎可以使任何你喜欢的angular色的操作员。
=
执行分配。 :=
未在标准库或语言规范中定义。 如果你愿意的话,这个名字对其他库或你的代码是免费的。