5

私はClojureが初めてで、関数のオプションの引数を「展開」して、オプションの引数を使用する別の関数に送信できるようにする方法にこだわっています(ただし、これらの引数をキーワードのシーケンスではなくキーワードとして使用したい)。

私は xml を解析しています。関数が機能するように値をハードコーディングすると、xml を調べて「タイトル」の値を見つけます。

; zd was required like this
[clojure.data.zip.xml :as zd]
; ...
(defn get-node-value [parsed-xml & node-path]
  (zd/xml-> (zip/xml-zip parsed-xml) :item :title zd/text))

(get-node-value parsed-xml)

私がやりたいのは、「node-path」を使用して任意の数のキーワードを渡すことですが、以下のように記述すると、キーワードのシーケンスとして入力されるため、例外がスローされます。

(defn get-node-value [parsed-xml & node-path]
  (zd/xml-> (zip/xml-zip parsed-xml) node-path zd/text))

(get-node-value parsed-xml :item :title)
; ClassCastException clojure.lang.ArraySeq cannot be cast to clojure.lang.IFn  clojure.data.zip/fixup-apply (zip.clj:73)

ありがとう!

4

2 に答える 2

8

あなたは適用を探していると思います(http://clojuredocs.org/clojure_core/clojure.core/apply)

(defn get-node-value [parsed-xml & node-path]
  (let [params (concat node-path [zd/text])]
    (apply zd/xml-> (zip/xml-zip parsed-xml) params)))
于 2012-06-10T23:24:15.987 に答える