Skip to content

Instantly share code, notes, and snippets.

@petitviolet
Created February 7, 2018 03:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save petitviolet/641fdb12ee3ca4279bccdab52c8e829b to your computer and use it in GitHub Desktop.
Save petitviolet/641fdb12ee3ca4279bccdab52c8e829b to your computer and use it in GitHub Desktop.
Scala `defer` like Golang
class Deferred() {
private var fs: Seq[() => Any] = Nil
def apply(f: => Any): Unit = {
fs = { () =>
f
} +: fs
}
def runDeferred(): Unit = fs.reverse foreach { _.apply }
}
def deferrable[A](f: Deferred => A): Unit = {
val d = new Deferred()
try {
f(d)
} finally {
d.runDeferred()
}
}
private def run() = deferrable { defer =>
defer(println("shutting down..."))
defer(Database.shutDown())
defer(println("shutdown completed!"))
Database.setup()
val result = MyTable.findAll()
println(result)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment