我试图表达这样的条件:
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
但是没有其他更简单的方法吗?
我试图表达这样的条件:
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 也有 between?:
if value.between?(lower, higher)
在 Ruby 中有很多方法可以做同样的事情。您可以使用以下方法检查值是否在范围内,
14.between?(10,20) # true
(10..20).member?(14) # true
(10..20).include?(14) # true
但是,我建议使用between
than member?
or include?
。你可以在这里找到更多关于它的信息。
可以表示a <= x <= b
为 as(a..b).include? x
和a <= x < b
as (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
.
usebetween?
是最简单的方法,我发现这里的大多数答案都没有提到(ruby doc 解释也很难理解), usingbetween?
确实包含min
andmax
值。
例如:
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 引用:
between?(min, max) → true 或 false 如果 obj <=> min 小于零或 anObject <=> max 大于零,则返回 false,否则返回 true。
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/
你也可以使用这个符号:
(1..5) === 3 # => true
(1..5) === 6 # => false
将值调整到范围?
value = 99
[[value,0].max, 5].min # 5
value = -99
[[value,0].max, 5].min # 0
value = 3
[[value,0].max, 5].min # 3