0

在红宝石的给定范围内拟合整数的最简洁方法是什么?如果调用它的整数超出范围,则返回给定范围的最小值或最大值的方法。

原生红宝石中是否存在这样的方法?

120.fit(1..100) # => 100
-20.fit(1..100) # => 1

或者也许有一个很好的班轮做同样的事情?

编辑

为了实现这一点,我现在必须执行以下操作:

some_integer = some_range.min if some_integer <= some_range.min
some_integer = some_range.max if some_integer >= some_range.max
4

3 回答 3

3

像这样的东西?

class Fixnum
  def fit(range)
    self > range.max ? range.max : (self < range.min ? range.min : self)
  end
end

用法:

> 5.fit(1..4) #=> 4
> 0.fit(1..4) #=> 1
> 3.fit(1..4) #=> 3
于 2013-05-10T14:48:42.630 回答
2

不自信是最干净的,但这是一种方式

(1..100).minmax.push( -50 ).sort[1]
# => 1
(1..100).minmax.push( 120 ).sort[1]
# => 100
于 2013-05-10T14:54:37.590 回答
0
r = (1..100)
v = -12
r.include?(v) ? v : ( r.begin > v ? r.begin : r.last)
于 2013-05-10T14:51:39.627 回答