2014-01-26 33 views
4

我正试图在我正在写的clojure程序中实现一个记录协议。我得到的错误是“不支持的绑定表单”。为什么在clojure中实现协议时会出现“Unsupported binding form”错误?

(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”函数是抛出错误的东西。我有一种感觉,我试图错误地使用多个参数。有谁知道我做错了什么?

回答

4

您已经正确诊断出这个问题。您需要按照http://clojure.org/protocols中的示例进行操作,并分别在defrecord的主体中定义您的set-max方法的多个arities。

... 
(set-max [table] ...) 
(set-max [table id] ...) 
... 
+0

太棒了,谢谢。 –

相关问题