Sự khác nhau giữa == và === là gì? Bạn nên sử dụng cái nào?Các toán tử so sánh Ruby? == và ===
Trả lời
==
được sử dụng cho sự bình đẳng trong phát biểu có điều kiện như if
, unless
vv ===
được sử dụng để xác định sự bình đẳng trong case
báo cáo.
Ví dụ, 10 không bằng 1,20, nhưng nó nằm trong phạm vi đó. Vì vậy, bạn có thể muốn có thể đặt phạm vi trong trường hợp của bạn tuyên bố, và có nó được chọn. Ngoài ra, lưu ý rằng các câu lệnh case chuyển thành b === a trong các câu lệnh như 'case a khi b then true end' –
Cả hai chỉ là các phương thức được gọi trên các đối tượng. Điều này có nghĩa rằng các đối tượng quyết định có nghĩa là gì. Tuy nhiên, có những quy ước trong Ruby về cách chúng khác nhau. Thông thường, ==
nghiêm ngặt hơn ===
- a === b
sẽ gần như luôn đúng nếu a == b
là. Nơi tốt nhất để đọc về điều này là http://ruby-doc.org/core/classes/Object.html. Cuộn xuống các phần khác nhau về ==
và ===
. Dưới đây là một số các công ước tôi biết về:
==
, khi áp dụng cho đồng bằngObject
s, sẽ chỉ có đúng nếu một là chính xác giống như người kia - nếu chúng được lưu trữ trong cùng một vị trí bộ nhớ (điều này là cách Ruby hoạt động nội bộ). Tuy nhiên, nếu các đối số có các kiểu khác với Object, thì phương thức này thường sẽ bị ghi đè.equal?
giống như==
cho đồng bằngObject
s, nhưng sẽ không bao giờ bị ghi đè bởi lớp con.===
đang sử dụng cho:- một sự thay thế
is_a?
, về phía sau.String === 'str'
là sự thật. - phù hợp với regex.
/s[at]r*/ === 'str'
là sự thật.
- một sự thay thế
Bạn có thể tìm thấy ý nghĩa cụ thể của ===
cho các lớp khác nhau trong tài liệu cho các lớp học, ví dụ, phiên bản Range
là ở đây (một từ đồng nghĩa với include?
): http://ruby-doc.org/core/classes/Range.html#M000691
Một ví dụ tốt về ghi đè' == 'để nó làm những gì bạn (có thể) mong đợi là chuỗi. So sánh '==' và '.equal' cho một chuỗi ký tự và một biến trỏ vào chuỗi" giống nhau ". – Telemachus
- 1. Perl so sánh toán tử và "số"
- 2. Toán tử so sánh! = ~ Trong ruby là gì?
- 3. Toán tử so sánh MySQL, dấu cách
- 4. Toán tử so sánh cho chuỗi C
- 5. Chuỗi so sánh: toán tử ==() vs Equals()
- 6. Triển khai các toán tử so sánh khác về toán tử <trong một cuộc gọi
- 7. So sánh ruby băm
- 8. toán tử so sánh gcc reverse_iterator bị thiếu?
- 9. JPA CriteriaBuilder - Cách sử dụng toán tử so sánh "IN"
- 10. Ruby so sánh ngày
- 11. C# Loại So sánh: Type.Equals vs toán tử ==
- 12. toán tử so sánh ưa thích Python của
- 13. Kết hợp trên tuple sử dụng toán tử so sánh
- 14. cách chính xác để so sánh toán tử chuỗi jquery =
- 15. Sử dụng toán tử so sánh bên ngoài điều kiện
- 16. So sánh toán tử quá tải trong php
- 17. C# so sánh các thuật toán
- 18. Toán tử ghi đè == trong Ruby
- 19. Các toán tử so sánh nhị phân trên các loại chung
- 20. '|| =' toán tử trong Ruby
- 21. So sánh các chuỗi và mảng C#
- 22. Sự khác biệt giữa bằng và chính xác bằng toán tử so sánh cụm từ
- 23. Hỗ trợ ngôn ngữ cho các toán tử so sánh xích (x <y <z)
- 24. Liệu một đối tượng Python không ghi đè các toán tử so sánh bằng chính nó?
- 25. Sử dụng toán tử == trong Java để so sánh các đối tượng bao bọc
- 26. Tránh các toán tử == và! = Trên các tham số kiểu generic, nhưng nó có thể so sánh với null không?
- 27. So sánh Không với các kiểu tích hợp sử dụng toán tử số học?
- 28. So sánh các biến lặp được xây dựng mặc định với toán tử ==
- 29. Toán tử Javascript '>' so sánh các ký tự với khoảng trắng như thế nào?
- 30. Phương thức sắp xếp của Ruby hoạt động như thế nào với toán tử so sánh kết hợp (spaceship)?
Có một thực sự vững chắc trả lời cho câu hỏi này tại [Sự khác biệt giữa bằng nhau là gì ?, eql ?, === và ==?] (http://stackoverflow.com/questions/7156955/whats-the-difference-between-equal-eql-and) –