-
Notifications
You must be signed in to change notification settings - Fork 1
jpalmucci/clj-return-from
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
# clj-return-from
An implementation of common lisp's return-from for clojure
## Usage
The 'block' macro will establish a block with lexical scope. In this
lexical scope, a return-from-<blockname> macro can be used to
immediately exit the block with some return value.
EX:
(block foo
(+ 1 2))
==> 3
(block foo
(return-from-foo :bar)
(+ 1 2))
==> :bar
Note: If you attempt to return-from a block on a different thread
than the one that established the block, you will get a runtime error.
I implemented clj-return-from for several reasons:
1) implementing non-local exits requires that you throw a custom
exception (that must at least hold the return value). That requires
implementing a named class that extends Throwable. That requires you
drop into Java. I've done that so you don't have to.
2) clj-return-from contains code to check that the block and the
return-from are on the same thread.
3) clj-return-from blocks have lexical scope. If you create a named block
that calls a function that happens to create a block with the same
name, they won't conflict.
4) clj-return-from is more concise than try / throw.
To install, add:
:dependencies [[clj-return-from "1.0.0"]]
to your project.clj file. The code is hosted on clojars.
## License
Copyright (C) 2010 Jeff Palmucci
Distributed under the Eclipse Public License, the same as Clojure.
About
common lisp's return-from macro for clojure. Allows non-local exits from lexically scoped blocks.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published