代码未检查Ruby中的第二个elsif条件

时间:2019-04-26 09:33:05

标签: ruby control-flow

我的代码正在控制流中返回第一条语句

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”。有什么问题?

2 个答案:

答案 0 :(得分:4)

如果你喜欢

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)

答案 1 :(得分:2)

让我们谈论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 ...等。