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

Reply via email to