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 <[email protected]>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 <[email protected]>
>>
>>> 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 [email protected]
>>>
>>> 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 [email protected]
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> [email protected]
> 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 [email protected].
> 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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.