Way back when I started with Clojure i was doing this:

(let [constant-data (something-expensive)]
  (defn my-fn [x]
    (do-something-with x constant-data)))

But was advised instead to do this:

(def my-fn
  (let [constant-data (something-expensive)]
    (fn [x]
      (do-something-with x constant-data))))

So, there's that (third) option as well.

// ben


On Sat, Mar 23, 2013 at 9:56 AM, Marko Topolnik <marko.topol...@gmail.com>wrote:

> What if there's some computation in there, but such that should be
> performed at compile time? I still prefer the outside let whenever I want
> to make dead sure it's not getting reallocated on each call. If there was
> some well-specified and easily understood guarantee (for example, like the
> one Java has for compile-time constants), only then I would prefer the
> inner let.
>
>
> On Friday, March 22, 2013 8:05:10 PM UTC+1, Laurent PETIT wrote:
>
>>
>> 2013/3/22 jamieorc <jami...@gmail.com>
>>
>>> Curious which style is preferred in Clojure and why:
>>>
>>> (defn f1 []
>>>   (let [x {:foo 1 :bar 2 :baz 3}]
>>>     (keys x)))
>>>
>>> (let [x {:foo 1 :bar 2 :baz 3}]
>>>   (defn f2 []
>>>     (keys x)))
>>>
>>
>> In either case, AFAIK, the compiler will recognize {:foo 1 :bar 2 :baz 3}
>> as constant and will only create it once when compiling.
>>
>> First version is preferred.
>>
>>
>>>
>>> Cheers,
>>>
>>> Jamie
>>>
>>> --
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clo...@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+u...@**googlegroups.com
>>>
>>> For more options, visit this group at
>>> http://groups.google.com/**group/clojure?hl=en<http://groups.google.com/group/clojure?hl=en>
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to clojure+u...@**googlegroups.com.
>>>
>>> For more options, visit 
>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>> .
>>>
>>>
>>>
>>
>>  --
> --
> 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
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to