On Sat, Nov 14, 2009 at 8:55 AM, Albert Cardona <sapri...@gmail.com> wrote:
> On Fri, Nov 13, 2009 at 11:26 PM, Mike Hogye <stacktra...@gmail.com> > wrote: > > Why is there an easy way to def a private function (defn-), but no > > similarly easy way to def an arbitrary var as private? > > > The way I see it, def- would encourage gratuitous variable declaration > imperative style. > > By private var what one means is a local variable. > > If you want a private variable use a let binding: > > (let [my-private-var "Something not to be shared"] > (defn my-public-fn > "Do something" > [a b] > (str a b my-private-var))) > > If you need the private variable to be mutable, use a ref and dosync > changes on it. That goes a long way towards correctness. > I find top-level lets to be messy compared to defining global constants like this: (def +the-constant+ value) There's a defvar that adds docstring capability to def, and a private-making version defvar-, in clojure.contrib.def. My own style preference would be to put important constants in defs at the top of the file, rather than use let or (worse) embed "magic numbers" or the like in individual functions that might need to be tweaked. Constants that are truly constant because they're forced to be by math, the algorithm used, or whatever might be locally letted in the function that uses them, to name them while keeping them with the rest of the algorithm, though. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en