, Lisp ( Scala):
- : - . :
defun, defgeneric, defclass ( ), deftable ( ). Unwind-protect wrappers: . , , . : with-open-file (), with-transaction ( ).- : , CL-WHO (HTML), Parenscript (JavaScript). Lisp, , .
: Java 7 Closable try -:
try (SomeClosable foo = openFoo()) {
foo.doSomething();
}
Java 6 :
SomeClosable foo;
try {
foo = openFoo();
foo.doSomething();
} finally {
if (foo != null && foo.isOpen()) {
foo.close();
}
}
Java , . Lisp :
(defmacro with-open-foo ((var &rest options) &body body)
`(let ((,var (open-foo ,@options)))
(unwind-protect
(progn ,@body)
(when ,var (close ,var)))))
(with-open-foo (f :bar baz)
(do-some-foo f)
(and-something-else))
(let ((f (open-foo :bar baz)))
(unwind-protect
(progn
(do-some-foo f)
(and-something-else))
(when f (close f))))
source
share