Подтвердить что ты не робот

Как проверить, включено ли значение между двумя другими значениями?

Я пытаюсь выразить такое условие:

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

Но нет другого, более простого способа?

4b9b3361

Ответ 1

Ruby также имеет между?:

if value.between?(lower, higher) 

Ответ 2

Есть много способов сделать то же самое в Ruby. Вы можете проверить, находится ли значение в диапазоне, используя следующие методы,

14.between?(10,20) # true

(10..20).member?(14) # true

(10..20).include?(14) # true

Но я бы предложил использовать between чем member? или include? , Вы можете найти больше об этом здесь.

Ответ 3

Вы можете выразить 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.

Ответ 4

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 в противном случае.

Ответ 5

  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/

Ответ 6

Отрегулировать значение в диапазоне?

value = 99 
[[value,0].max, 5].min # 5

value = -99
[[value,0].max, 5].min # 0

value = 3
[[value,0].max, 5].min # 3