首页 > 解决方案 > 'Case X do' 总是选择第一个选项

问题描述

我在值列表上循环,在列表中我有一个案例来选择应该返回的内容。代码循环代码如下所示:

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

这些调用的日志输出是:

+++++
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

我总是得到“值是真的”,我们可以清楚地看到案例值是假的。这里会发生什么?

谢谢你的帮助。

标签: elixir

解决方案


这正是 case 表达式应该如何工作的。您将 的值value放入key变量中。如果要匹配变量value的当前值key而不是隐藏它,则需要使用pin 运算符

case value do
  ^key -> ...
  _ -> ...
end

推荐阅读