it-swarm.com.ru

Как проверить, входит ли число в диапазон (в одном утверждении)?

Я использую Ruby на Rails 3.0.9, и я хотел бы проверить, входит ли число в диапазон. То есть, если у меня есть переменная number = 5, я хотел бы проверить 1 <= number <= 10 и получить логическое значение, если значение number включено в этот диапазон.

Я могу сделать это так:

number >= 1 && number <= 10

но я хотел бы сделать это в одном заявлении. Как я могу это сделать?

74
Backo

(1..10).include?(number) это хитрость.

Кстати: если вы хотите проверить число с помощью ActiveModel::Validations, вы можете даже сделать:

validates_inclusion_of :number, :in => 1..10

читать здесь о validates_inclusion_of

или Rails 3 путь:

validates :number, :inclusion => 1..10
144
Mario Uher

Перечислимые # включить? :

(1..10).include? n

Range # крышка? :

(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
54
tybro0103

Если это не является частью процесса проверки, вы можете использовать #between?:

2.between?(1, 4)
=> true
16
Holin

Чтобы получить точные сообщения об ошибках при отправке формы, попробуйте

validates_numericality_of :tax_rate, greater_than_or_equal_to: 0, less_than_or_equal_to: 1, message: 'must be between 0 & 100'
4
Jon

Рельсы 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

3
sudhir Vishwakarma

В Ruby 1.9 наиболее прямым переводом выглядит Range # cover? :

Возвращает true, если obj находится между начала и конца, то есть нач. <= Obj <= end (или исключение конца, когда exclude_end? Имеет значение true).

Если вам интересно, чем он отличается от Range#include?, то последний выполняет итерации по всем элементам диапазона, если это не числовой диапазон. Смотрите это сообщение в блоге для более подробного объяснения.

2
Michael Kohl