Clojure: let scope and function return value

kfk picture kfk · Nov 18, 2011 · Viewed 10.4k times · Source

I am having some troubles figuring how to use the "let" form. In the example below, I would like to locally bind the value "cols" in order to work on it later in the function. What I am noticing, however, is that if I use "let" the function sel-opt-tmp will return a nil value instead than a list.

(defn sel-opt-tmp []
  (let [cols "test"]))

(prn (sel-opt-tmp))

*The above code returns a nil value.

I understand that "let" only binds a value in the scope of a function, what I do not know is if there is a way to pass the value out of the let scope. Maybe there is something like "return" that I am not aware of? Or this is simply bad design and I should not use the binding at all in this case (this tends to create long chains of functions that are difficult to read although)?

Answer

Adrian Mouat picture Adrian Mouat · Nov 18, 2011

It returns nil because the contents of the let statement is empty (or nil). Try:

(let [cols "test"] cols)

Which will return the value of cols. As seh says, a let statement evaluates to the value of its last sub-expression.