我正在使用Ruby on Rails 3.0.9,我想检查范围内是否包含数字。也就是说,如果我有一个变量,number = 5
我想检查1 <= number <= 10
并检索一个布尔值(如果该number
值包含在该范围内)。
我可以这样:
number >= 1 && number <= 10
但我想在一份声明中做到这一点。我怎样才能做到这一点?
我正在使用Ruby on Rails 3.0.9,我想检查范围内是否包含数字。也就是说,如果我有一个变量,number = 5
我想检查1 <= number <= 10
并检索一个布尔值(如果该number
值包含在该范围内)。
我可以这样:
number >= 1 && number <= 10
但我想在一份声明中做到这一点。我怎样才能做到这一点?
Answers:
(1..10).include?(number)
是诀窍。
顺便说一句:如果您想使用验证号码ActiveModel::Validations
,您甚至可以执行以下操作:
validates_inclusion_of :number, :in => 1..10
在此处阅读有关validates_inclusion_of的信息
或Rails 3+方式:
validates :number, :inclusion => 1..10
allow_nil
。像这样添加即可:, allow_nil: true
(1..10).include? n
(1..10).cover? n
n.between? 1, 10
validates :n, numericality: {only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 10}
validates :n, inclusion: 1..10
validates :amount, numericality: { less_than_or_equal_to: ->(m) { m.user.balance }, greater_than_or_equal_to: 0 }
滑轨4
如果您想通过ActiveModel :: Validations来使用它,则可以使用
validates_inclusion_of :number, :in => start_number..end_number
或Rails 3语法
validates :number, :inclusion => start_number..end_number
但是我找到的最简单的方法是
number.between? start_number, end_number
在Ruby 1.9中,最直接的翻译似乎是Range#cover?:
如果obj在beg和end之间,则返回true,即beg <= obj <= end(或当exclude_end?为true时,结束不包含)。
如果您想知道与的区别是Range#include?
什么,如果它是非数字范围,则后者会在范围的所有元素上进行迭代。有关更多详细说明,请参见此博客文章。
如果要检查自定义数组中是否存在特定编号,
例如,我想知道list = [1,4,6,10]中是否包含5
list.include? 5 => false
list.include? 6 => true