Skip to content

Instantly share code, notes, and snippets.

@sudix
Created September 13, 2012 07:57
Show Gist options
  • Save sudix/3712739 to your computer and use it in GitHub Desktop.
Save sudix/3712739 to your computer and use it in GitHub Desktop.
using in Scala
//close automatically after use
//How to use
//import Control.using
//using(someDbConnection1, someDbConnection2) {(db1, db2) =>
// doSomething(db1, db2)
//}
object Control {
type T = {def close(): Unit}
def using[Closeable <: T, B](closeable: Closeable)(getB: Closeable => B): B = {
try {
getB(closeable)
} finally {
closeable.close
}
}
def using[Closeable1 <: T, Closeable2 <: T, B]
(closeable1: Closeable1, closeable2: Closeable2)
(getB: (Closeable1, Closeable2) => B): B = {
try {
getB(closeable1, closeable2)
} finally {
try {
closeable1.close
} finally {
closeable2.close
}
}
}
def using[Closeable1 <: T, Closeable2 <: T, Closeable3 <: T, B]
(closeable1: Closeable1, closeable2: Closeable2, closeable3: Closeable3)
(getB: (Closeable1, Closeable2, Closeable3) => B): B = {
try {
getB(closeable1, closeable2, closeable3)
} finally {
try {
closeable1.close
} finally {
try {
closeable2.close
} finally {
closeable3.close
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment