【问题标题】:Why am I getting "Unsupported binding form" error when implementing protocol in clojure?为什么在 clojure 中实现协议时出现“不支持的绑定形式”错误?
【发布时间】:2014-01-26 00:08:02
【问题描述】:

我正在尝试在我正在编写的 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。有谁知道我做错了什么?

【问题讨论】:

    标签: clojure jvm


    【解决方案1】:

    您已正确诊断问题。您需要遵循http://clojure.org/protocols 中的示例,并在 defrecord 的主体中分别定义 set-max 方法的多个参数。

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

    【讨论】:

      猜你喜欢
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多