0

我正在编写一个 clojure 函数,当我使用defn它来定义它时它可以正常工作,但是当我使用defresource. 我怀疑这与:as-response我正在使用的密钥有关,但我不知道如何修复它。有任何想法吗?我的代码:

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

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

4

1 回答 1

2

defn你定义的那个相当于

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

由于表达式的值是do表达式中的最后一个形式——关键字和向量没有任何副作用——函数定义等价于

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

你所拥有的是一个 0 参数的 arity 函数。和:as-response其他关键字/向量不做任何事情。

查看 Liberator的文档:as-response,该库在使用. 此外,根据有关资源的文档defresource,如果您想要参数化资源,则只需将参数向量传递给即可。所以你的资源应该被定义

(defresource function-name
  :allowed-methods [:get]
  :available-media-types ["application/json"]
  :as-response (fn [d ctx] ...))
于 2020-05-20T03:45:43.433 回答