2013-02-28 4 views
1

저는 초보자입니다. 나는 "callInvoker"나는 아무것도 얻을 호출 할 때 내가스칼라 익명 함수 - 예상대로 동작하지 않습니다.

def invokeFunc(myFunc:() => String){ 
    println(myFunc()) 
    } 

    def callInvoker(){ 
    invokeFunc({ return "this is a string" }) 
    } 

을 예상대로이 코드가 작동하지 않는 이유를 내가 좋아하는 것

은 이해합니다. 나는 "this is a string"이라는 프린트를 기대했지만 대신 아무것도 반환하지 않습니다. 왜?

+0

의도적으로 '='을 함수 서명 뒤에 두지 않았습니까? – peri4n

+0

질문에 대해 설명해 주시겠습니까? –

+1

def functionName (arg : Arg) : ReturnType = {Body}는 함수의 표준 정의입니다. 당신은 당신의 함수가 Unit (자바 세계에서는 void)를 리턴하는 컴파일러에게 알려주는 '='를 생략했다. – peri4n

답변

4

이것은 return이 익명의 함수에서 반환하지 않고 포함하는 메서드에서 반환하기 때문입니다. 따라서 invokeFunc({ return "this is a string" })을 수행하면 callInvoker (값이 "this is a string"이고 실제로는 callInvokerUnit이므로 무시됩니다)에서 돌아옵니다.

def invokeFunc(myFunc:() => String){ 
    println(myFunc()) 
} 

def callInvoker(){ 
    invokeFunc{() => "this is a string" } 
} 

callInvoker() 

이제 익명 함수가 실제로 "this is a string" (명시 적 return가 발생하지 않는 한 어떠한 기능/방법, 마지막 표현을 반환하지만 내가 설명한 바와 같이 return은 포함 적용 반환

A는 코드가 될 것 수정 메서드를 사용하고 절대로 익명의 함수를 사용하지 마십시오.

+0

정말 고마워요. 사이트에서 허용하면 귀하의 답변을 수락합니다. (최소 시간 제한). –

관련 문제