2012-10-30 63 views
1

举一个整数x,我想返回x如果它是某一范围的边界之内。如果不是,则返回违反边界的值。剪辑编号斯卡拉

def keepWithinRange(x:Int, min:Int, max:Int) : Int = { 
    if (x < min) return min; 
    if (x > max) return max; 
    return x; 
} 

有没有更好的方法来做到这一点?

回答

9

我会这样写:

def keepWithinRange(x: Int, min: Int, max: Int) = math.max(min, math.min(max, x)) 

或者这样:

def keepWithinRange(x: Int, min: Int, max: Int) = 
    if (x < min) min else if (x > max) max else x 

要么比使用return在斯卡拉控制流更地道。

3

您可以使用最大值和最小值方法从RichInt:

def keepWithinRange(x:Int, minVal:Int, maxVal:Int) = x max minVal min maxVal 
+0

这是一个情况下,我不认为管道符符号有助于可读性(使用'RichInt'方法花费一对夫妇的创建包装对象)。 –

+0

@Travis'一个最大B'具有完全相同的运行时间为'math.max(A,B)',我的机器上至少。不确定编译器或运行时优化。 –

+0

@Luigi:您使用的是2.10? – Arjan