代码未检查 ruby 中的第二个 elsif 条件
code is not checking second elsif condition in ruby
我的代码返回控制流中的第一个语句
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 == 2 || 4 || 5
。
它不等同于 a == 2 || a == 4 || a == 5
,而是按以下顺序求值:
a == 2
是 false
false || 4
是 4
4 || 5
未评估短路
因此,a == 2 || 4 || 5
的值为 4...
同样的规则适用于 b == 9||10||11
... 等等
你的if就像
a = 6
b = 13
if (a == 2)||4||5 && (b == 9)||10||11
所以最后
4 && 10
这是 true
因为 ruby 中唯一的错误值是 nil
和 false
本身
也许你想要的是
if [2, 4, 5].include?(a) && [9, 10, 11].include?(b)
我的代码返回控制流中的第一个语句
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 == 2 || 4 || 5
。
它不等同于 a == 2 || a == 4 || a == 5
,而是按以下顺序求值:
a == 2
是false
false || 4
是 44 || 5
未评估短路
因此,a == 2 || 4 || 5
的值为 4...
同样的规则适用于 b == 9||10||11
... 等等
你的if就像
a = 6
b = 13
if (a == 2)||4||5 && (b == 9)||10||11
所以最后
4 && 10
这是 true
因为 ruby 中唯一的错误值是 nil
和 false
本身
也许你想要的是
if [2, 4, 5].include?(a) && [9, 10, 11].include?(b)