使用Liberator的Clojure defresource参数arity错误。

问题描述 投票:0回答:1

我正在写一个clojure函数,当我使用的是 defn来定义它,但当我使用 defresource. 我猜测这与 :as-response 我正在使用的键,但我不知道如何解决这个问题,有什么想法吗?

(defn function-name []
  :allowed-methods [:get]
  :available-media-types ["application/json"]
  :as-response (my function is here))

使用defresource时出错: "错误的参数数(2)传递给...... "我传递了0个参数,使用defn可以正常工作。

clojure compojure arity liberator
1个回答
2
投票

defn 等于您所定义的

(defn function-name 
  []
  (do
    :allowed-methods 
    [:get]
    :available-media-types 
    ["application/json"]
    :as-response 
    (...)))

由于 do 表达式是表达式中的最后一种形式--而且关键字和向量没有任何副作用--函数定义相当于

(defn function-name 
  []
  (...))

你所拥有的是一个0参数的奇异函数。这个 :as-response 和其他关键词向量没有任何作用。

观察 文件 对于Liberator来说,当使用一个2参数的奇偶校验函数时,该库需要一个2参数的奇偶校验函数。:as-response. 另外,根据 关于资源的文件 你只需要传一个参数向量给 defresource 如果你想要一个参数化的资源。所以你的资源应该定义为

(defresource function-name
  :allowed-methods [:get]
  :available-media-types ["application/json"]
  :as-response (fn [d ctx] ...))
© www.soinside.com 2019 - 2024. All rights reserved.