我循环访问值列表,并且在列表中有一个案例可以选择应返回的值。代码循环代码如下所示:
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。这里会发生什么?
谢谢你的帮助。
这正是case表达式应该如何工作的方式。您将的值value放入key变量中。如果要与变量value的当前值匹配key而不是对其进行阴影处理,则需要使用pin运算符。
case value do
  ^key -> ...
  _ -> ...
end
Run Code Online (Sandbox Code Playgroud)