Ответ 1
Ruby также имеет между?:
if value.between?(lower, higher)
Я пытаюсь выразить такое условие:
if 33.75 < degree <= 56.25
# some code
end
Но Ruby дает эту ошибку:
undefined method `<=' for true:TrueClass
Я предполагаю, что один из способов сделать это:
if 33.75 < degree and degree <= 56.25
# code
end
Но нет другого, более простого способа?
Ruby также имеет между?:
if value.between?(lower, higher)
Есть много способов сделать то же самое в Ruby. Вы можете проверить, находится ли значение в диапазоне, используя следующие методы,
14.between?(10,20) # true
(10..20).member?(14) # true
(10..20).include?(14) # true
Но я бы предложил использовать between
чем member?
или include?
, Вы можете найти больше об этом здесь.
Вы можете выразить a <= x <= b
как (a..b).include? x
и a <= x < b
как (a...b).include? x
.
>> (33.75..56.25).include? 33.9
=> true
>> (33.75..56.25).include? 56.25
=> true
>>
>> (33.75..56.25).include? 56.55
=> false
К сожалению, для a < x <= b
, a < x < b
, <
UPDATE
Вы можете выполнить (-56.25...-33.75).include? -degree
. Но читать трудно. Поэтому я рекомендую вам использовать 33.75 < degree and degree <= 56.25
.
use between?
- самый простой способ, я нашел, что большинство ответов здесь не упоминалось (пояснение в ruby doc трудно понять), используя between?
INCLUDE значение min
и max
.
например:
irb(main):001:0> 2.between?(1, 3)
=> true
irb(main):002:0> 3.between?(1, 3)
=> true
irb(main):003:0> 1.between?(1, 3)
=> true
irb(main):004:0> 0.between?(1, 3)
=> false
Кстати, ruby doc quote:
между? (min, max) → true или false Возвращает false, если obj <= > min is меньше нуля или если aObject <= > max больше нуля, true в противном случае.
undefined method `<=' for true:TrueClass
означает, что Ruby не анализирует ваше if-условие так, как вы ожидаете.
Использование &&
и добавление круглых скобок помогает!
if (33.75<degree) && (degree<=56.25)
...
end
Плохая привычка оставлять круглые скобки - как только выражение становится более трудным, вы можете получить неожиданный результат. Я видел это много раз в коде других людей.
Использование and
вместо &&
в Ruby - это идея очень плохой, см.:
https://www.tinfoilsecurity.com/blog/ruby-demystified-and-vs
http://rubyinrails.com/2014/01/30/difference-between-and-and-in-ruby/
Отрегулировать значение в диапазоне?
value = 99
[[value,0].max, 5].min # 5
value = -99
[[value,0].max, 5].min # 0
value = 3
[[value,0].max, 5].min # 3