51

Scala=和有什么区别?:=

我已经广泛搜索“scala Colon-equals”,但找不到任何确定的东西。

4

4 回答 4

88

=在 scala 中是实际的赋值运算符——它做了一些你无法控制的特定事情,例如

  • 在创建时给出一个valvar一个值
  • 更改 a 的值var
  • 更改类中字段的值
  • 制作类型别名
  • 可能是其他人

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

因此,如果您想找出:=您正在使用的特定库中的含义......我的建议是查看 Scaladocs(如果它们存在)以查找名为:=.

于 2011-10-13T04:45:22.040 回答
59

来自马丁·奥德斯基:

  • 最初,我们使用冒号来表示赋值——就像在 Pascal、Modula 和 Ada 中一样——以及一个等号来表示相等。许多编程理论家会争辩说这是正确的方法。赋值不是相等的,因此您应该使用不同的符号进行赋值。但是后来我和一些来自 Java 的人一起尝试了它。我得到的反应是,“嗯,这看起来是一门有趣的语言。但是你为什么要写冒号等于? 是什么?”我解释说就像帕斯卡那样。他们说,“现在我明白了,但我不明白你为什么坚持这样做。”然后我意识到这不是我们想要坚持的事情。我们不想说,“我们有更好的语言,因为我们写冒号而不是等号来进行赋值。”这是一个完全次要的观点,人们可以习惯任何一种方法。所以我们决定在这些小事,当我们确实想在其他地方有所作为时

来自Scala 的设计目标

于 2011-10-13T04:47:59.127 回答
5

=执行任务。 :=未在标准库或语言规范中定义。如果您愿意,它是一个可供其他库或您的代码免费使用的名称。

于 2011-10-13T04:43:41.237 回答
5

Scala 允许运算符重载,您可以在其中定义运算符的行为,就像编写方法一样。

与其他语言一样,=是赋值运算符。

我所知道的不是标准运算符:=,但可以定义一个具有此名称的运算符。如果您看到这样的运算符,您应该检查您正在查看的任何内容的文档,或者搜索该运算符的定义位置。

Scala 运算符可以做很多事情。您基本上可以用您喜欢的几乎任何角色制作操作员。

于 2011-10-13T04:49:27.743 回答