如何知道一个数字是大于还是小于一个范围?
(1..2) <=> 3 # => -1
(-2..21) <=> -10 # => 1
(-2..21) <=> 0 # => 0
此功能是否已经有 ruby 实现的方法?否则,我会自己编码。
回答
您可以利用clamp
:
3.clamp( 1..2 ) <=> 3 # => -1
-10.clamp(-2..21) <=> -10 # => 1
0.clamp(-2..21) <=> 0 # => 0
一般来说:
number.clamp(range) <=> number
要获得“距离”:(如您的原始问题所述)
number - number.clamp(range)
您可以添加nonzero?
到 getnil
而不是0
:
(number - number.clamp(range)).nonzero?
例如:
def distance(range, number)
(number - number.clamp(range)).nonzero?
end
distance(1..2, 3) #=> 1
distance(-2..21, -10) #=> -8
distance(1..4, 3) #=> nil