代码不检查ruby中的第二个elsif条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码不检查ruby中的第二个elsif条件相关的知识,希望对你有一定的参考价值。

我的代码返回控制流中的第一个语句

a = 6
b = 13
c = 4
if a == 2||4||5 && b == 9||10||11
puts "staement1"
elsif a == 6||7||8 && b == 12||13||14
puts "statement2"
elsif puts c
end

输出是“statement1”但它应该是“statement2”。问题是什么?

答案

你是否喜欢

a = 6
b = 13
if (a == 2)||4||5 && (b == 9)||10||11

所以最后

4 && 10

这是true,因为红宝石中唯一的假值是nilfalse本身

也许你想要的是像

if [2, 4, 5].include?(a) && [9, 10, 11].include?(b)
另一答案

让我们谈谈a == 2 || 4 || 5

它不等同于a == 2 || a == 4 || a == 5,但按以下顺序进行评估:

  1. a == 2false
  2. false || 4是4
  3. 4 || 5未经评估和短路。

因此,a == 2 || 4 || 5的价值是4 ......

同样的规则适用于b == 9||10||11 ...等。

以上是关于代码不检查ruby中的第二个elsif条件的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 discord.js v12 中的第二个参数是不是为空

如何在 EF / EF Core 中的第二个表上实现具有某些条件的左连接?

如何将 GPU 用作 .Net 中的第二个处理器?

从片段类中的对话框添加项目到recyclerview。

将第二个表中的第二个(条件)结果添加到 SQL 查询

第二个存在条件不起作用