“案例X做”始终是第一个选择

Ale*_*oba 2 elixir

我循环访问值列表,并且在列表中有一个案例可以选择应返回的值。代码循环代码如下所示:

value = code &&& key
IO.puts "+++++"
IO.puts "key:#{key},code:#{code},code &&& key:#{value},value == key:#{value == key}"
case value do
  key -> IO.puts "value is true"
  _ -> IO.puts "value is false"
end
Run Code Online (Sandbox Code Playgroud)

这些调用的日志输出为:

+++++
key:1,code:1,code &&& key:1,value == key:true
value is true
+++++
key:2,code:1,code &&& key:0,value == key:false
value is true
+++++
key:4,code:1,code &&& key:0,value == key:false
value is true
+++++
key:8,code:1,code &&& key:0,value == key:false
value is true
+++++
key:16,code:1,code &&& key:0,value == key:false
value is true
Run Code Online (Sandbox Code Playgroud)

我总是得到“值是true”,并且我们可以清楚地看到case值是false。这里会发生什么?

谢谢你的帮助。

Jus*_*ood 5

这正是case表达式应该如何工作的方式。您将的值value放入key变量中。如果要与变量value的当前值匹配key而不是对其进行阴影处理,则需要使用pin运算符

case value do
  ^key -> ...
  _ -> ...
end
Run Code Online (Sandbox Code Playgroud)