number = -5
case number
when number < 0
return "Please enter a number greater than 0."
when 0..1
return false
when 2
return true
end
...
我希望它返回“请输入一个大于0的数字”,但它返回nil。这是为什么?如何检查数字是否小于0?
答案 0 :(得分:5)
当您将变量提供给case
时,会使用when
方法将其与每个===
子句进行比较。返回===
的第一个true
将是已执行的分支。
在您的情况下,number < 0
正在评估true
,而-5 === true
是错误的!
您要做的是将number
从case
移开,并将所有when
子句设为布尔值:
case
when number < 0
return "Please enter a number greater than 0."
when number.between?(0, 1)
return false
when number == 2
return true
end
或者保持号码开启,但要使所有的when
s值可以与之比较:
case number
when -Float::INFINITY..0 # or (-1.0/0)..0
return "Please enter a number greater than 0."
when 0..1
return false
when 2
return true
end
答案 1 :(得分:4)
when number < 0
与when true
相同,因为number
确实小于零,when
将不会输入-5 != true
}。
你可以尝试
when (-1.0/0)..0 # negative Infinity to 0
或者,如果您使用的是1.9.2或更高版本:
when -Float::INFINITY..0