Scala和Spark中==和===的区别

68

我来自Java背景,对Scala不熟悉。

我正在使用Scala和Spark。但是我不明白何时使用=====

有人能告诉我在哪种情况下需要使用这两个运算符,以及=====之间的区别是什么吗?


3
可能是Scala equality with type checking?的重复内容。 - OneCricketeer
1
你应该提供一个上下文。=====只是像其他任何函数一样的函数。它们没有任何特殊的意义。 - zero323
1
@cricket_007 我真的怀疑OP对Scalaz / Cats是否感兴趣。 我猜他更关心的是Spark SQL。 - zero323
@zero323 我同意你的观点,但是我并不是打算指出 Scalaz,只是认为“类型检查”可能是不同之处。正如你所指出的那样,它们只是函数,需要添加更多的上下文来比较对象。 - OneCricketeer
@zero323:我同意,我认为OP对Spark SQL很感兴趣。而且可能还不太了解Spark正在使用Datasets/DataFrames。 - Josiah Yoder
3个回答

75
"=="使用equals方法检查两个引用是否指向同一对象。"==="的定义取决于上下文/对象。 对于Spark来说,"==="使用equalTo方法。 请参见: - 对于 == ,请查看 https://spark.apache.org/docs/2.0.0/api/java/org/apache/spark/sql/Column.html#equals(java.lang.Object) - 对于 === ,请查看 https://spark.apache.org/docs/2.0.0/api/java/org/apache/spark/sql/Column.html#equalTo(java.lang.Object) (由于您在引用Spark:) 对于Spark来说,一个重要的区别是返回值。对于列: - " == "返回布尔值。 - " === "返回列(其中包含比较两列元素的结果)。

17
此外,Spark SQL必须使用===运算符,因为==运算符不能被重载。 - wrschneider

14

一般来说,它们只是函数。

对于不同的类型,"==" 和 "===" 可能有不同的定义或被赋予不同的含义。

例如,在某些测试框架中,“ ===” 被定义为某些特殊函数。请参见此处


5
ScalaTest允许您使用Scala的断言语法,但定义了一个三等号运算符(===)以提供更好的错误消息。以下代码将给出一个错误,仅指示断言失败:

assert(1 == 2) 使用三等号代替会给出更详细的错误消息,“1 did not equal 2”:

assert(1 === 2)

请查看此页面以获取更多详细信息: 什么是Scala Koans中的===(三等号)运算符?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接