【问题标题】:What is the difference between = and := in Scala?Scala 中的 = 和 := 有什么区别?
【发布时间】:2011-12-06 15:56:51
【问题描述】:

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

我已经在 Google 上广泛搜索“scala Colon-equals”,但找不到任何确定的内容。

【问题讨论】:

标签: scala syntax colon-equals


【解决方案1】:

= in scala 是实际的赋值操作符——它做了一些你无法控制的特定事情,例如

  • 在创建 valvar 时为其赋值
  • 更改var 的值
  • 更改类中字段的值
  • 创建类型别名
  • 可能是其他人

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

因此,如果您想了解 := 在您使用的特定库中的含义...我的建议是查看 Scaladocs(如果存在)以查找名为 := 的方法。

【讨论】:

  • 通过使用单词“assignmenty”+1 实现出色的语法重载
【解决方案2】:

来自马丁·奥德斯基:

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

来自The Goals of Scala's Design

【讨论】:

  • 恕我直言,最好使用:= 进行分配,使用== 进行相等检查,并且根本不要使用语言上模棱两可的=
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

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

    a lot 可以使用 Scala 运算符。你基本上可以用你喜欢的任何字符来制作一个运算符。

    【讨论】:

    • 感谢您纠正我的错字并让我免于看起来像个白痴;)
    猜你喜欢
    • 1970-01-01
    • 2011-12-02
    • 2020-07-20
    • 2012-01-08
    • 2020-05-24
    • 2010-11-19
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多