数値を上限/下限に制限しますか?
概要
Ruby または Rails で数値 num の上限/下限を制限する組み込みの方法またはよりエレガントな方法はありますか?
例えば何かのようなもの:
def number_bounded (num, lower_bound, upper_bound)
return lower_bound if num < lower_bound
return upper_bound if num > upper_bound
num
end
解決策
これを行うための賢い方法は次のとおりです。
[lower_bound, num, upper_bound].sort[1]
しかし、それはあまり読みやすいものではありません。 1 回だけ行う必要がある場合は、そうします
num < lower_bound ? lower_bound : (num > upper_bound ? upper_bound : num)
または、複数回必要な場合は、Comparable モジュールにモンキーパッチを適用します。
module Comparable
def bound(range)
return range.first if self < range.first
return range.last if self > range.last
self
end
end
したがって、次のように使用できます
num.bound(lower_bound..upper_bound)
また、単に Ruby ファセットを要求することもできます。これにより、これを実行するメソッド クリップが追加されます。