首页 文章

Scala中=和:=之间有什么区别?

提问于
浏览
45

Scala中 =:= 有什么区别?

我已广泛搜索“scala colon-equals”,但无法找到任何确定的内容 .

4 回答

  • 52

    scala中的 = 是实际的赋值运算符 - 它执行了一些特定的事情,大多数情况下你无法控制,例如

    • 在创建时给出 valvar

    • 更改 var 的值

    • 更改类上字段的值

    • 制作类型别名

    • 可能是其他人

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

    所以,如果你想找出 := 在你正在使用的特定库中意味着什么...我的建议是通过Scaladocs(如果它们存在)来查找名为 := 的方法 .

  • 5

    来自Martin Odersky:

    • 最初我们有 colon-equals 用于赋值 - 就像在Pascal,Modula和Ada中一样 - 并且单个等号表示相等 . 许多编程理论家会认为这是正确的方法 . 赋值不是相等的,因此您应该使用不同的符号进行赋值 . 但后来我尝试了一些来自Java的人 . 我得到的反应是,“嗯,这看起来像是一种有趣的语言 . 但你为什么要写 colon-equals ?这是什么?" And I explained that its like that in Pascal. They said, "现在我明白了,但我完全不为人知,人们可以习惯这两种方法 . 因此,当我们确实想要有所作为的其他地方时,我们决定不在这些小事情上对抗惯例 .

    来自The Goals of Scala's Design

  • 78

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

  • 5

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

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

    我不知道名为 := 的标准运算符,但可以使用此名称定义一个 . 如果您看到这样的运营商,您应该查看您正在查看的任何文档,或者搜索该运营商的定义位置 .

    您可以使用Scala运算符进行a lot . 实际上,您可以使用您喜欢的任何字符来创建操作符 .

相关问题