2016-09-14 21 views
5

Tôi đến từ nền Java và mới trong scala.Sự khác biệt giữa == và === trong scala, spark

Tôi đang sử dụng scala và tia lửa. Nhưng không thể hiểu nơi tôi sử dụng =====.

Ai đó có thể cho tôi biết trong trường hợp nào tôi cần sử dụng toán tử hai này và sự khác biệt giữa ===== là gì.

+3

Có thể trùng lặp [Scala bình đẳng với kiểm tra loại?] (Http://stackoverflow.com/questions/9084464/scala-equality-with-type-checking) –

+1

Bạn nên cung cấp ngữ cảnh. '===' và '==' chỉ là các hàm khác. Họ không có ý nghĩa đặc biệt nào cả. – zero323

+1

@ cricket_007 Tôi nghiêm túc nghi ngờ OP là thành Scalaz/Cats. Tôi đoán là nó là nhiều hơn về Spark SQL. – zero323

Trả lời

7

Nói chung, chúng chỉ là các chức năng.

Đối với các loại khác nhau, "==" và "===" có thể được xác định hoặc "quá tải" cho các nghĩa khác nhau.

Ví dụ: trong một số khung kiểm tra, "===" được xác định cho một số chức năng đặc biệt. Xem this.

10

"==" đang sử dụng phương thức equals kiểm tra xem hai tham chiếu có trỏ đến cùng một đối tượng không. Định nghĩa của "===" phụ thuộc vào ngữ cảnh/đối tượng. Đối với Spark, "===" đang sử dụng phương thức equalTo. Xem

(Vì bạn đang tham chiếu Spark :) Một sự khác biệt quan trọng đối với Spark là giá trị trả về. Đối với cột:

  • == trả về một boolean

  • === trả về một cột (trong đó có kết quả của sự so sánh của các yếu tố của hai cột)

+2

Ngoài ra, Spark SQL * phải * sử dụng toán tử '===' vì toán tử '==' không thể bị quá tải. – wrschneider

0

ScalaTest phép bạn sử dụng Scala của cú pháp xác nhận, nhưng định nghĩa toán tử ba bằng (===) để cung cấp cho bạn thông báo lỗi tốt hơn. Đoạn mã dưới đây sẽ cung cấp cho bạn một lỗi duy nhất chỉ ra rằng một sự khẳng định thất bại:

assert (1 == 2) Sử dụng bình đẳng triple thay vào đó sẽ cung cấp cho bạn các thông báo lỗi thông tin mới hơn, "1 không bằng 2":

khẳng định (1 === 2)

hãy xem trang này để biết thêm chi tiết; What is the === (triple-equals) operator in Scala Koans?

Các vấn đề liên quan