関数f()
を次のように定義したいと思います。
_val f: (vararg strings: String) -> Unit = { for (str in it) println(str) }
_
f("a","b","c")
で呼び出すことができます。上記のf()
の定義の場合、vararg
修飾子(Kotlin v。1.3.60)を指すコンパイルエラーが発生します。
_Unsupported [modifier on parameter in function type]
_
vararg
パラメータを受け入れるラムダをどのように定義できますか?
これは不可能だと思います。以下は、vararg
を使用した関数のタイプを示しています。 vararg
パラメータはArray
で表されます:
fun withVarargs(vararg x: String) = Unit
val f: KFunction1<Array<out String>, Unit> = ::withVarargs
この動作は docs でも提案されています。
関数内では、タイプ
T
のvarargパラメータはT
の配列として表示されます。つまり、上記の例のts変数はタイプArray<out T>
を持っています。
したがって、例ではArray<String>
を使用する必要がありました。関数をラムダとして記述する代わりに、vararg
を使用できる通常の関数を使用して、必要に応じて呼び出しを外観にすることができます。
fun f(vararg strings: String) = strings.forEach(::println)
f("a","b","c")