Я попытался вернуть функцию, которая принимает другую функцию в качестве аргумента, чтобы посмотреть, смогу ли я получить две лямбда-выражения вне ()
.
fun foo(m:String,bar1:(m:String)->Unit) : (bar2:(m:String)->Unit)->Unit
{
bar1(m)
return { bar2: (m: String) -> Unit -> bar2(m) }
}
Оказывается, я не могу. Я заканчиваю тем, что поместил еще одну пару ()
вокруг или после первой функции, чтобы компилятор знал, что последняя лямбда является аргументом для возвращаемой функции, вместо того, чтобы пытаться передать два лямбда-выражения за пределы списка аргументов в скобках.
(foo("a message"){println("message 1: $it")}){println("message 2: $it")}
или
foo("a message"){println("message 1: $it")}(){println("message 2: $it")}
Очевидно, что это выглядит не лучше. Я думаю
foo("a message", { println("message 1: $it") }, { println("message 2: $it") } )
или
foo("a message", { println("message 1: $it") }){ println("message 2: $it")}
достаточно хороши.
Интересно, что это разрешено в Swift
func foo (m:String,bar1 : ((String) -> Void) ) -> (_:((String) -> Void))->Void
{
bar1(m)
return {bar2 in bar2(m)}
}
foo(m: "test"){print("m1: \($0)")}{print("m2: \($0)")}