a

Câu hỏi Sự khác nhau giữa == và =: = trong Erlang khi được sử dụng với các thuật ngữ nói chung là gì?


Ngoài thực tế là =:= ngăn chặn các số nguyên không mong muốn:

1> 1=:=1.0.
false

Lợi thế của việc sử dụng =:= với các thuật ngữ nói chung?

Hiệu suất tốt hơn?


15
2018-03-20 16:25


gốc




Các câu trả lời:


Ưu điểm lớn nhất của =:= là nó trả về true chỉ cho cùng một thuật ngữ giống như cách khớp mẫu. Vì vậy, bạn có thể chắc chắn chúng giống nhau. 1 và 1 có cùng điều khoản và 1 với 1.0 không. Đó là nó. Nếu bạn viết hàm như foo(A, B) when A =:= B -> A. và bar(A, B) when A =:= B -> B. chúng sẽ cư xử giống nhau. Nếu bạn dùng == nó sẽ không có chức năng giống nhau. Nó chỉ đơn giản là ngăn chặn sự ngạc nhiên. Ví dụ: nếu bạn thực hiện một số lưu trữ khóa / giá trị thì sẽ không đúng nếu bạn lưu trữ giá trị bằng khóa 1 và sau đó nhận giá trị này nếu yêu cầu khóa 1.0. Và vâng, có một chút hình phạt về hiệu suất với == nhưng ít ngạc nhiên là quan trọng hơn nhiều. Chỉ dùng =:= và =/= khi bạn có ý định so sánh các thuật ngữ tương tự. Sử dụng == và /= chỉ khi đó là ý định của bạn để so sánh các con số.


21
2018-03-20 23:51



Vì vậy, cuối cùng, đó là tất cả về việc so sánh ints chống lại phao, không? Nếu bạn có một thuật ngữ với int và float bên trong, =: = đảm bảo một phép toán chính xác. Nhưng ngoài ints và float, không có sự khác biệt nào giữa == và =: =, là gì? Ý tôi là, với các loại khác, từ == là chính xác. - Ricardo
@ Ricardo: Đúng vậy. - Fylke
@Ricardo: Có và không. Nó có thể được xem như chơi với các từ nhưng hãy tưởng tượng ví dụ này: A = {foo, [bar,1]}, B = {foo, [bar, 1.0]}, true = A == B, false = A=:=B Vì vậy, nói về mặt kỹ thuật A và B không phải là con số rõ ràng và toán hạng == và =:=/2 không cư xử giống nhau nhưng bạn đúng, sự khác biệt trở thành với các con số. Đó là lý do tại sao tôi nói đúng về các thuật ngữ trong câu trả lời của tôi. - Hynek -Pichi- Vychodil
@ Hynek-Pichi-Vychodil: Cảm ơn vì sự công bố! - Ricardo
Cũng lưu ý rằng " "==[32.0] được đánh giá là true. - Carsten S


Eshell V5.9.3.1 (hủy bỏ với ^ G)
1> 1.0 == 1.
thật
2> 1.0 =: = 1.
sai
3>

nhìn thấy nó? khi đi với "==", nó sẽ chuyển hai phần tử vào cùng một định dạng để khớp. khi "=: =" không, khi hai phần tử là cùng một loại và cùng một giá trị sẽ trả về true.


0
2017-07-12 03:24