我正在尝试在我写的clojure程序中实现一个带有记录的协议。我得到的错误是“不支持的绑定表单”。
(defprotocol query-rows
(query-text [table])
(trans-cols [table rows])
(set-max [table] [table id]))
(defrecord Submissions [data max-id]
query-rows
(query-text [table]
(gen-query-text "SubmissionId" "Valid" "Submission"))
(trans-cols [table rows]
(let
[trans-data
(->>
rows
(trans-col #(if % 1 0) :valid :valid_count)
(trans-col #(if % 0 1) :valid :non_valid_count)
(trans-col format-sql-date :createdon :date))]
(assoc table :data trans-data)))
(set-max
([table]
(when-let [id (gen-get-max "SubmissionAgg2")]
(assoc table :max-id id)))
([table id] (assoc table :max-id id))))
“set-max”函数正在抛出错误。我有一种感觉,我试图错误地使用多个arity。有谁知道我做错了什么?
答案 0 :(得分:4)
您已正确诊断出该问题。您需要按照http://clojure.org/protocols中的示例进行操作,并在defrecord主体中分别定义set-max方法的多个arities。
...
(set-max [table] ...)
(set-max [table id] ...)
...