使用案例/检查负数

时间:2014-01-07 21:51:34

标签: ruby

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?

2 个答案:

答案 0 :(得分:5)

当您将变量提供给case时,会使用when方法将其与每个===子句进行比较。返回===的第一个true将是已执行的分支。

在您的情况下,number < 0正在评估true,而-5 === true是错误的!

您要做的是将numbercase移开,并将所有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 < 0when true相同,因为number确实小于零,when将不会输入-5 != true }。

你可以尝试

when (-1.0/0)..0 # negative Infinity to 0

或者,如果您使用的是1.9.2或更高版本:

when -Float::INFINITY..0