2017-12-01 3 views
0

나는 Studio에서 오류가 발생하고있다. 다음은 스크린 샷입니다. enter image description here코 틀린 기능 : 필수 단위? 반복적으로 코 틀린</p> <pre><code>fun test(){ compute { foo -> Log.e("kotlin issue", "solved") } // This line is //showing error } fun compute(body: (foo:String) -> Unit?){ body.invoke("problem solved") } </code></pre> <p>에서이 문제를 직면 찾을 지능

+0

왜 'Unit'을 사용합니까? 나는이 유형을 사용할 이유가 있다고 생각하지 않는다. –

답변

4

compute 함수에 넘기는 람다는 Unit?을 반환해야합니다. 지금은 Log.e() 호출의 결과를 반환하며 출력에 기록 된 바이트 수를 나타내는 Int을 반환합니다. 또한,

fun test() { 
    compute { foo -> 
     Log.e("kotlin issue", "solved") 
     Unit 
    } 
} 

Unit에 반환 값을 변환하는 다른 방법이있는 곳 this question를 참조하십시오 당신이 원하는 모든 람다의 메시지를 기록하는 경우, 당신은 명시 적으로 같은 그것의 끝에서 Unit를 반환 할 수 있습니다 논의했다.

+0

감사합니다. 그것은 효과가 있었고, 가능한 한 빨리 받아 들일 것입니다. 하지만 Unit을 작성하는 방법에 대해 약간의 조명이나 링크를 풀어 주시겠습니까? 어떤 개체를 초기화하거나 타입 변환하지 않습니다. – Debanjan

+2

'Unit'은 실제로 싱글 톤'object'입니다. 소스 [here] (https://github.com/JetBrains/kotlin/blob/master/core/builtins/src/kotlin/Unit.kt)를보십시오 :) – zsmb13

1

Android Log.ebody 매개 변수가 Unit?이어야 함을 지정하는 매개 변수 인 Int을 반환합니다.

fun myCompute(body: (foo: String) -> Any?) { compute { body(it); null } } 
: 호출을 변경

compute { foo -> Log.e("kotlin issue", "solved"); null } 

을 또는 계산을 포장 :

fun compute(body: (foo: String) -> Unit) { body.invoke("problem solved") } 

또는 변경 호출과 같이 :

당신은 compute 메소드 서명과 같이 변경하거나 필요

다음 예상대로 호출하십시오.

myCompute { foo -> Log.e("kotlin issue", "solved") } 
관련 문제