如何知道一个数字是大于还是小于一个范围?

Chi*_*Ani 3 ruby

(1..2) <=> 3 # => -1
(-2..21) <=> -10 # => 1
(-2..21) <=> 0 # => 0
Run Code Online (Sandbox Code Playgroud)

此功能是否已经有 ruby​​ 实现的方法?否则,我会自己编码。

Ste*_*fan 7

您可以利用clamp

  3.clamp( 1..2 ) <=>   3  # => -1
-10.clamp(-2..21) <=> -10  # =>  1
  0.clamp(-2..21) <=>   0  # =>  0
Run Code Online (Sandbox Code Playgroud)

一般来说:

number.clamp(range) <=> number
Run Code Online (Sandbox Code Playgroud)

要获得“距离”:(如您的原始问题所述)

number - number.clamp(range)
Run Code Online (Sandbox Code Playgroud)

您可以添加nonzero?到 getnil而不是0

(number - number.clamp(range)).nonzero?
Run Code Online (Sandbox Code Playgroud)

例如:

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
Run Code Online (Sandbox Code Playgroud)