我试图表达这样一个条件:
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
但是没有另一种更简单的方法吗?
答案 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 <= b
,a < 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