2017-01-27 3 views
4

함수를 매개 변수로 전달하려고하는데 'Unit을 함수로 호출 할 수 없습니다. 미리 감사드립니다.kotlin에서 매개 변수로 함수 전달하기

uploadImageToParse(imageFile, saveCall1()) 
uploadImageToParse(imageFile, saveCall2()) 
uploadImageToParse(imageFile, saveCall3()) 

private fun uploadImageToParse(file: ParseFile?, saveCall: Unit) { 
     saveCall()//Throws an error saying 'Unit cannot be invoked as function' 
} 

답변

10

문제는 uploadImageToParse 메서드에 매개 변수로 함수를 전달하지 않는다는 것입니다. 결과를 전달하고 있습니다. 또한 uploadImageToParse 메서드는 safeCall단위 매개 변수가 함수이 아닐 것으로 예상하고 있습니다.

이 기능을 사용하려면 먼저 uploadImageToParse에 함수 매개 변수가 필요하다고 선언해야합니다.

fun uploadImageToParse(file: String?, saveCall:() -> Unit) { 
    saveCall() 
} 

그러면이 매개 변수에 함수 매개 변수를 전달할 수 있습니다. 주제에 대한 자세한 내용은

uploadImageToParse(imageFile, {saveCall()}) 

은 코 틀린 설명서 Higher-Order Functions and Lambdas를보십시오.

편집 : @marstran이 지적했듯이 Function Reference을 사용하여 매개 변수로 함수를 전달할 수도 있습니다. 파라미터가 다음과 같이 수행되는 것처럼

uploadImageToParse(imageFile, ::saveCall) 
+8

참조'{saveCall는()}'기록 될 수있다 : saveCall'. – marstran

+0

인수가있는 함수를 어떻게 사용 하시겠습니까? –

+0

기본적으로 빈 arg 목록 대신에 취해야 할 args를 지정한다는 점만 제외하면 동일합니다. 예 : myFunction : (경로 : 경로) -> 단위. 이 예제를 문서에서 살펴보십시오. https://kotlinlang.org/docs/reference/lambdas.html#function-types – Januson

3

함수 포인터 수락 :

private fun uploadImageToParse(file: ParseFile?, saveCall:() -> Unit){ 
    saveCall.invoke() 
} 

()는 파라미터의 타입이다.

-> Unit 부분이 반환 유형입니다.

번째 예 :

자세한 내용
fun someFunction (a:Int, b:Float) : Double { 
    return (a * b).toDouble() 
} 

fun useFunction (func: (Int, Float) -> Double) { 
    println(func.invoke(10, 5.54421)) 
} 

상기 Kotlin Documentation

관련 문제