kotlinで、他の言語のdeferのようなことを実現するコード。
import java.lang.Exception
class MyDefer {
val list = ArrayList<() -> Unit>()
fun defer(fn: () -> Unit) {
list.add(fn)
}
fun doDefer() {
list.reversed().forEach {
try {
it()
} catch(_: Exception) {
}
}
}
}
fun mydefer(fn: MyDefer.() -> Unit ): MyDefer {
val mydefer = MyDefer()
try {
mydefer.fn()
} finally {
mydefer.doDefer()
}
return mydefer
}
fun main() {
mydefer {
print("1\n")
defer{ print("defer1\n") }
defer{ print("defer2\n") }
print("2\n")
}
}
書いてはみたが、きっと使わない気がする。