【问题标题】:What is the difference between == and =:= in Erlang when used with terms in general?Erlang 中 == 和 =:= 与一般术语一起使用时有什么区别?
【发布时间】:2012-04-05 03:46:04
【问题描述】:

除了=:= 可以防止不需要的整数转换之外:

1> 1=:=1.0.
false

=:= 与一般术语一起使用有什么好处?

性能更好?

【问题讨论】:

    标签: erlang


    【解决方案1】:

    =:= 的最大优点是它只对相同的术语以与模式匹配相同的方式返回 true。所以你可以确定它们是一样的。 11 是相同的术语,11.0 不是。而已。如果您编写像 foo(A, B) when A =:= B -> A.bar(A, B) when A =:= B -> B. 这样的函数,它们的行为将相同。如果您使用==,它的功能将不同。它只是防止意外。例如,如果您进行一些键/值存储,那么如果您使用键 1 存储值,然后在请求键 1.0 时获取此值,则将是不正确的。是的,== 有一点性能损失,但最不惊讶更重要。当您打算比较相同的术语时,只需使用=:==/=。仅当您打算比较数字时才使用 ==/=

    【讨论】:

    • 所以,最后,就是将整数与浮点数进行比较,不是吗?如果你有一个包含整数和浮点数的术语, =:= 保证精确的数学。但是除了整数和浮点数之外,== 和 =:= 之间没有任何区别,是吗?我的意思是,对于其他类型,== 同情心是准确的。
    • @Ricardo:是和不是。可以看作是在玩文字,但想象一下这个例子:A = {foo, [bar,1]}, B = {foo, [bar, 1.0]}, true = A == B, false = A=:=B 所以从技术上讲AB 显然不是数字,操作数===:=/2 的行为不一样但是你是对的,区别变成数字。这就是为什么我在我的回答中严格谈论术语。
    • @Hynek-Pichi-Vychodil:感谢您的夸奖!
    • 另请注意," "==[32.0] 评估为 true
    • " " =:= [32] 的计算结果也为 true,因为 Erlang 中的字符串存储为整数列表。
    【解决方案2】:
    *Eshell V5.9.3.1  (abort with ^G)   
    1> 1.0==1.   
    true   
    2> 1.0=:=1.  
    false  
    

    当我们使用== 时,它会将两个元素转换为相同的格式以进行匹配。 对于=:=,它不会发生——当两个元素是相同类型和相同值时,它将返回true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2013-05-20
      • 1970-01-01
      • 2013-08-08
      • 2016-08-26
      • 1970-01-01
      • 2020-01-29
      相关资源
      最近更新 更多