【发布时间】:2016-10-19 14:13:36
【问题描述】:
我有一个实现这样的多方法的命名空间:
(ns a)
(defmulti funca (fn [system data] system))
(defmethod funca :add-z
[system data]
(conj data {:z 26}))
我有第二个命名空间实现不同的多方法:
(ns b)
(defmulti funcb (fn [system data new-element] system))
(defmethod funcb :add-element
[system data new-element]
(conj data new-element))
我将第三个命名空间定义为
(ns c
(:require [a :refer [funca]]
[b :refer [funcb]]))
我想在命名空间 c 中创建一个方法,我可以调用它,例如
(funcc (funca :add-z {:a 1 :b 2 :c 3})
(funcb :add-element {:y 25}))
这应该获取(funca :add-z {:a 1 :b 2 :c 3})(即{:a 1 :b 2 :c 3 :z 26})的结果并将该结果用作(funcb :add-y-and-count-elements {:y 25}) 的输入,然后返回结果{:a 1 :b 2 :c 3 :y 25 :z 26}。
在尝试定义 funcc 时,我正在尝试类似
(ns c
(:require [a :refer [funca]]
[b :refer [funcb]]))
(defn funcc [funca funcb]
(partial funcb funca))
或
(defn funcc [funca funcb]
(funcb (funca)))
或
(defn funcc [funca funcb]
(-> funca
funcb))
但是当在 REPL 中运行其中任何一个并调用 funcc 时,我得到了
传递给 b/eval19367/fn 的 args (2) 数量错误
定义funcc的正确语法是什么,这样它就可以将第一个参数的输出作为传递给它的第二个参数的输入,然后返回结果?
【问题讨论】:
标签: methods clojure namespaces