val callback = {
// なにか
...
}
...
callback?.invoke()
kotlinは{
}
で囲まれたコードは、ラムダ式になるのでこんなこともできます。
しかし、、、
val callback = {
if (someValue == 100) return // <- エラー
...
}
...
callback?.invoke()
ラムダ式の中でreturn
するとエラーになってしまいます。
メソッドにラムダ式を使うときは@メソッド名
をつけると問題なくreturnできるのですが、
上のコードの場合は@
のあとに付ける名前が無いのでできません。
list.forEach {
if (it == 10) return@forEach
}
こういうときはラベルを付ければいいよという話。
val callback = mark@{
if (someValue == 100) return@mark
...
}
...
callback?.invoke()
mark
っていうのは適当に付けたもので実際は何でもいい。
@
の位置がラベル付けとreturnで違うのがモヤモヤするけど、
便利です。