2012-10-30 3 views
1

x의 정수를 지정합니다. 일부 범위의 경계 내에있는 경우 x을 반환하고 싶습니다. 그렇지 않은 경우 위반하는 경계의 값을 반환합니다.Scala 범위 내의 클립 번호

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'a max b '는 적어도 내 컴퓨터에서'math.max (a, b)'와 정확히 같은 실행 시간을가집니다. 컴파일러인지 런타임 최적화인지 확실하지 않습니다. –

+0

@ 루이지 : 2.10을 사용하고 있습니까? – Arjan