One thing to note is that while it's true "keywords can be used as functions" they can only really do one thing, which is get values from maps. That is to say, the keyword-function :foo is equivalent to the function #(get % foo). The function :foo has no relationship with the function foo, if it is defined. I hope that makes sense!
So, to some approximation, only use keywords as functions as a shorthand for getting values from maps. As others have pointed out, although the keyword :require is in function position above, that code never actually gets executed - it's just data for the ns macro. This can be one of the more confusing things to get straight ... Jony On Thursday, 3 July 2014 18:11:35 UTC+1, g vim wrote: > > I'm reading "Cloujure in Action" as an introduction to Clojure and, > although, I understand a keyword can be used as a function I don't > understand the difference between: > > (ns org.currylogic.damages.http.expenses > (:require [clojure.data.json :as json-lib] > [clojure.xml :as xml-core])) > > ... and > > (ns org.currylogic.damages.http.expenses > (require [clojure.data.json :as json-lib] > [clojure.xml :as xml-core])) > > > When is it idiomatic or even preferable to substitute a function with a > keyword equivalent? > > > gvim > -- 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/d/optout.