如何检查两个其他值之间是否包含值?

时间:2013-09-03 15:34:25

标签: ruby conditional-statements

我试图表达这样一个条件:

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

但是没有另一种更简单的方法吗?

7 个答案:

答案 0 :(得分:64)

Ruby也介于?:

之间
if value.between?(lower, higher) 

答案 1 :(得分:8)

在Ruby中有很多方法可以做同样的事情。 您可以使用以下方法检查值是否在范围内

14.between?(10,20) # true

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

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

但是,我建议使用between而不是member?include?。您可以找到有关它的更多信息here

答案 2 :(得分:6)

您可以将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 <= ba < x < b,...

似乎没有这样的东西

<强>更新

您可以使用(-56.25...-33.75).include? -degree完成。但它很难读懂。所以我建议你使用33.75 < degree and degree <= 56.25

答案 3 :(得分:2)

使用between?是最简单的方法,我发现这里的大多数答案都没有提及(ruby doc解释也很难理解),使用between?确实包含min和{ {1}}值。

例如:

max
<顺便说一句,ruby doc引用:

  

介于?(min,max)之间→true或false如果obj&lt; =&gt;,则返回false分是   小于零或如果anObject&lt; =&gt; max大于零,为true   否则。

答案 4 :(得分:1)

  undefined method `<=' for true:TrueClass

意味着Ruby没有像你期望的那样解析你的if条件。

使用&&并添加括号有帮助!

 if (33.75<degree) && (degree<=56.25)
   ...
 end

遗漏括号是一个坏习惯 - 一旦表达变得更加困难,你就会得到令人惊讶的结果。我已经在其他人的代码中看过很多次了。

在Ruby中使用and代替&&非常糟糕的想法,请参阅:

https://www.tinfoilsecurity.com/blog/ruby-demystified-and-vs

http://rubyinrails.com/2014/01/30/difference-between-and-and-in-ruby/

答案 5 :(得分:0)

将值调整到范围?

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

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

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

答案 6 :(得分:0)

你也可以使用这个符号:

(1..5) === 3           # => true
(1..5) === 6           # => false