On Aug 16, 2009, at 11:56 PM, tsuraan wrote:

(defh a
[b:String [c:Double :as list:java.util.List] {d:java.util.Random :d}]
  (.toCharArray b)
  (.size list)
  (.floatValue c)
  (.nextInt d))

What's that :as in the [ c:Double :as list:java.util.List ] vector?


The entire expression you quoted requests destructuring of a sequential thing (such as a vector, seq, list, or something seq-able) as the second argument to a. The :as clause allows you to give a name to the entire sequential thing.

This desctruturing can be read as:

        bind c to the first item in the sequential thing
        bind list to the entire sequential thing

Here are a few examples:

        user=> (let [[c :as b] [5 4 3 2 1]] (prn c b))
        5 [5 4 3 2 1]
        nil
        user=> (let [[c m :as b] [5 4 3 2 1]] (prn c m b))
        5 4 [5 4 3 2 1]
        nil
user=> (let [[c m :as b] (java.util.ArrayList. [:a :b :c])] (prn c m b))
        :a :b #<ArrayList [:a, :b, :c]>
        nil

The official docs for this are at: http://clojure.org/ special_forms#let .

(and (doc let) contains a pointer there)

--Steve

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to