代码未检查 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

输出是"语句1",但它应该是"语句2"。 问题出在哪里?

你的if就像

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

所以最后

4 && 10

这是true,因为 Ruby 中唯一的错误值是nilfalse本身

也许你想要的是类似的东西

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

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新