我写了以下代码,它保持x
在范围内(a..b)
.在伪代码中:
(if x < a, x = a; if x > b, x = b)
Run Code Online (Sandbox Code Playgroud)
在Ruby中它将是这样的:
x = [a, [x, b].min].max
Run Code Online (Sandbox Code Playgroud)
由于它是非常基本和有用的功能,我想知道是否有一个本机方法在ruby中这样做.
从Ruby 2.3.3开始,显然没有这样的方法,最短/更易读的方法是什么?
我发现:
x = [a, x, b].sort[1]
Run Code Online (Sandbox Code Playgroud)
到目前为止,但我不确定它是否更具可读性.
Mar*_*une 38
Ruby 2.4.0介绍Comparable#clamp
:
523.clamp(0, 100) #=> 100
Run Code Online (Sandbox Code Playgroud)
mb1*_*b14 34
我自己的答案:不
然而
x = [a, x, b].sort[1]
Run Code Online (Sandbox Code Playgroud)
是一个解决方案.
Zed*_*ddy 11
我这样做了:
class Numeric
def clamp min, max
[[self, max].min, min].max
end
end
Run Code Online (Sandbox Code Playgroud)
所以每当我想要夹住任何东西时,我都可以打电话:
x.clamp(min, max)
Run Code Online (Sandbox Code Playgroud)
我发现它很可读.
归档时间: |
|
查看次数: |
7231 次 |
最近记录: |