fork download
  1. import scala.collection.mutable
  2.  
  3. trait Resources extends AutoCloseable {
  4. private val resources = mutable.ListBuffer[AutoCloseable]()
  5.  
  6. protected def resource[T <: AutoCloseable](r: T) = {
  7. resources.prepend(r)
  8. r
  9. }
  10.  
  11. override def close() =
  12. resources.foreach(_.close())
  13. }
  14.  
  15. class Socket extends AutoCloseable {
  16. override def close() =
  17. println("Socket closed!")
  18. }
  19.  
  20. class Server extends Resources {
  21. val socket = resource(new Socket())
  22.  
  23. override def close() = {
  24. super.close()
  25. println("Server closed!")
  26. }
  27. }
  28.  
  29. object Main extends App {
  30. new Server().close()
  31. }
Success #stdin #stdout 0.4s 382144KB
stdin
Standard input is empty
stdout
Socket closed!
Server closed!