Xin lỗi nếu bị trùng lặp (Tôi không tìm thấy)Có phải "==" trong Ruby luôn luôn có giá trị bình đẳng không?
Điều này chỉ để xác nhận rằng toán tử Ruby ==
luôn thực hiện so sánh bình đẳng. I.e.
a == b
so sánh một giá trị so với giá trị b, thay vì hơn, như Java, cho dù họ trỏ đến cùng một đối tượng trong bộ nhớ (Đối với điều thứ hai này, trong Ruby, bạn nên sử dụng a.object_id == b.object_id
).
Như vậy, kết quả là nó là an toàn để so sánh các giá trị chuỗi với == trong Ruby (trong khi nó không phải là an toàn để làm như vậy trong Java)
Cảm ơn
Sửa:
Câu hỏi đặt ra là hành vi mặc định == đối với bất kỳ đối tượng Ruby nào, vì nó có thể đánh lừa các lập trình viên Java-C-C++ giả sử một == b so sánh các tham chiếu, chứ không phải nội dung tham chiếu.
Dù sao, bạn có thể kiểm tra mã này, sử dụng chuỗi
one="hello"
two="he"
two << "llo"
if one == two
puts "surprise: comparing values, not like in Java"
end
if not one.object_id == two.object_id
puts "obvious: do this to compare references"
end
Chỉnh sửa 2.
Vì vậy, trong Ruby, sự so sánh
a == b
kiểm tra một và giá trị b của
nhưng, việc chuyển nhượng
a = b
không sao chép giá trị, nhưng làm cho a và điểm b để cùng một đối tượng!
tiếp tục với mã trước
puts one.object_id
puts two.object_id
puts " and now "
one = two
puts one.object_id
puts two.object_id
Có. http://stackoverflow.com/questions/1710369/most-concise-way-to-test-string-equality-not-object-equality-for-ruby-strings – nneonneo
Liên kết được tham chiếu không trùng lặp câu hỏi này ... –
Có điều đầu tiên tôi nhận ra là trong Ruby toán tử '==' và hàm 'equals' được đảo ngược với những gì nó được mong đợi trong C giống như ngôn ngữ. – EliuX