2016-06-22 7 views
1

저는 현재 고차 함수를 배우고 있으며이를 구현하려고합니다.함수를 매개 변수로 전달

def bigger(n: Integer, m: Integer):Integer={ 
    if(n>m) return n 
    else return m 
} 

def bigT(t: Tuple3[Int, Int,(Int,Int)=>Int]): Integer={ 
    return t._3(t._1,t._2) 
} 

val tup=(5,2,bigger) 

번째 함수는 두 정수 그들과 함께 실행될 기능을 포함하는 튜플을 수신한다. 당신은 취급 할 경우 는 '_'로이 방법을 따라 객체 홈페이지에서 더 큰 방법

"실종 인수 :이 코드를 실행하려고하면

다음과 같은 오류가 나타날 수 (ideone.com 사용) 부분적으로 적용 기능 발에 대가리 = (5,2, 더 큰) "

나는 나중에

+1

3 개 개의 매개 변수 대신에'bigT'을 정의하는 것이 더 합리적 일 것인가? –

답변

0

당신은 IntegerInt을 혼동하는 기능 bigT에 대가리라는 튜플을 전달하려는.

사방 Int를 사용해보십시오 :

def bigger(n: Int, m: Int) = if(n > m) n else m 
def bigT(t: (Int, Int, (Int, Int) => Int)): Int = t._3(t._1, t._2) 

val res = bigT((5, 2, bigger)) // 5 
+0

감사합니다! scala를 처음 접했을 때의 또 다른 질문 : 매개 변수 선언이 정확 했습니까? 't : Tuple3 [Int, Int, (Int, Int) => Int]'를 쓸 수 있습니까? 아니면 틀린 것입니까? (어쨌든 내가 실수를 피하기 위해 언제든지 형식을 생략 할 것입니다. – user6454491

+0

정확하고 동등하지만 보통 "TupleX"라고 명시 적으로 쓰지 않고 항상 "(a, b, ...)"표기법을 사용하십시오. –

+0

예를 들어, def bigT (a : Int, b : Int, cmp : (Int, Int) => Int) : Int = cmp (a, b)'를 제안합니다. 제 의견으로는'._1','._2' 위치 메서드가이 경우에는 시끄럽고 가독성이 있어야합니다. –

관련 문제