整数値を持つ変数 x を min 〜 max で定義される範囲内に丸めたいというお話。
素直な書くと次のようになると思います。
## snip, ただし mim <= max の時。 if x < min x = min elsif x > max x = max end
でも、何だかつまらないので、次のようにしてみました。
## snip x = [min, x, max].sort[1]
変数 x, min, max を一つの配列に入れて昇順ソートすると、取り出したい値は常に1個目の要素に入ります。min <= max という条件も不要となりました。
## snip min = 1 max = 10 x = 3 [min, x, max].sort # => [1, 3, 10] x = -1 [min, x, max].sort # => [-1, 1, 10] x = 20 [min, x, max].sort # => [1, 10, 20]
範囲内の場合は元の値、min より小さければ min の値、max より大きければ max の値が1個目の要素になることが分かります。
コードゴルフ用ですかね。