elixir - '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
我总是得到“值是真的”,我们可以清楚地看到案例值是假的。这里会发生什么?
谢谢你的帮助。
解决方案
这正是 case 表达式应该如何工作的。您将 的值value
放入key
变量中。如果要匹配变量value
的当前值key
而不是隐藏它,则需要使用pin 运算符。
case value do
^key -> ...
_ -> ...
end
推荐阅读
- python - 有没有更好的方法在多个条件下使用 map 函数来做 pandas groupby?
- android-recyclerview - 在附加 PageSnapHelper 的 RecyclerView 中使用 TouchImageView?
- android - 代理块文件 - 手动下载有效。摇篮仍然无法正常工作
- google-sheets - SUM 时间值,其中右侧的列具有特定的字符串值
- matlab - 矩阵上拆分矩阵的结果是标量值吗?
- java - io.sentry.SentryClientFactory - 创建有效 DSN 时出错:“https://public:private@host:port/1”
- spring-webflux - @Scheduled 和 Spring webflux
- java - 停止数组中正在运行的线程
- django - 服务器响应状态为 415(不支持的媒体类型) - vue.js 和 python django
- wpf - Eyeshot 在整个应用程序中禁用触摸事件