ruby - 使用大小写/检查负数时

标签 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?

最佳答案

当你给case一个变量时, 它与每个 when 进行比较子句与 ===方法。第一个===返回 true将是执行的分支。

在你的例子中,number < 0正在评估 true , 和 -5 === true是假的!

你想要做的就是离开 number关闭 case ,并使所有的when子句 bool 值:

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

关于ruby - 使用大小写/检查负数时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20982687/

相关文章:

ruby - 将超赞字体图标添加到表单标签

ruby-on-rails - 如何在 Ruby on Rails 中循环几个月

ruby-on-rails - 攻击 ActiveRecord : add global named scope

ruby - 散列(在像 Ruby 这样的语言中)如何工作 "under the hood"?

ruby-on-rails - 在 Rails 中计算到下一个生日的天数

ruby-on-rails - 根据多个条件中的任何一个过滤 Ruby 对象数组?

ruby - 如何在 Go 中进行适当的 Git 兼容的 hex sha 打包/压缩

ruby - 在 ruby​​ 中执行外部程序并等待其执行

ruby - 模板方法模式,在哪里定义常用函数

ruby-on-rails - Ruby - 查找括号内的字符