2017-10-11 9 views
3

다음 함수에서 html 태그의 속성을 속성에 전달하려고합니다. 이러한 속성이 될 수 문자열 (test("id", "123")) 또는 함수 (test("onclick", {_ -> window.alert("Hi!")})는) :Kotlin에서 문자열이나 함수가 될 수있는 함수 매개 변수를 어떻게 선언 할 수 있습니까?

fun test(attr:String, value:dynamic):Unit {...} 

나는 Any, 코 틀린의 루트 유형으로 매개 변수 value를 선언했습니다. 그러나 함수 유형은 Any이 아닙니다. 유형을 dynamic으로 선언했지만

  • dynamic은 유형이 아닙니다. 단지 매개 변수에 대한 입력 검사를 해제합니다.
  • dynamic은 kotlin-js (자바 스크립트)에서만 작동합니다.

어떻게이 기능을 Kotlin (Java)에 쓸 수 있습니까? 함수 유형은 Any와 어떤 관련이 있습니까? 함수 유형과 Any을 모두 포함하는 유형이 있습니까?

답변

6

당신은 단지 기능을 과부하 수 :

fun test(attr: String, string: String? = null, lambda: (() -> Unit)? = null) { 
    if(string != null) { // do stuff with string } 
    if(lambda != null) { // do stuff with lambda } 
    // ... 
} 

을 그리고 다음과 같은 방법으로 함수를 호출 :

fun test(attr: String, value: String) = test(attr, { value }) 

fun test(attr: String, createValue:() -> String): Unit { 
    // do stuff 
} 
+0

거기 아닌가요 두 가지 유형의 변수를 만드는 방법은 무엇입니까? 'var x : dynamic'처럼'x'는 문자열이나 함수가 될 수 있습니까? 'x = "foo"; x = {print (...)}' – dilvan

2

당신은 쓸 수

test("attr") 
test("attr", "hello") 
test("attr", lambda = { println("hello") }) 
test("attr") { println("hello") } 
test("attr", "hello", { println("hello") }) 
test("attr", "hello") { println("hello") }