私はこのような状態を表現しようとしています:
if 33.75 < degree <= 56.25
# some code
end
しかしRubyはこのエラーを出します:
undefined method `<=' for true:TrueClass
それを行う1つの方法は次のようなものだと思います:
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
ただし、member?
またはinclude?
よりもbetween
を使用することをお勧めします。あなたはそれについてもっと知ることができます ここ 。
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
を使用することをお勧めします。
使用する between?
が最も簡単な方法です。ここではほとんどの回答で言及されていないことがわかりました(Rubyドキュメントの説明も理解しにくい)between?
は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:
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/
範囲に値を調整しますか?
value = 99
[[value,0].max, 5].min # 5
value = -99
[[value,0].max, 5].min # 0
value = 3
[[value,0].max, 5].min # 3