2012-10-30 98 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