从地图中调用时,Clojure函数抛出arity异常

时间:2018-03-18 05:54:44

标签: clojure

(map (fn [x]
    (let [username (or (:f_username x) nil)
          sites_names (SITES-NAMES username)
          x (assoc x :sites sites_names)]
     x)) my-rows)

在上面的代码中:SITES-NAMES给了我一个arity异常。然而 如果我称它(SITES-NAMES" theuser")它可以工作。为什么会这样 如果用户名评估为"用户"。

的示例

1 个答案:

答案 0 :(得分:0)

我不知道为什么会这样,但这里有一些提示:

1)使你的匿名函数成为顶级函数,如下:

(defn add-site [site-names {:keys [f-username] :as x}]
  (assoc x :sites (get site-names f-username)))

请注意我如何命名vars,有关命名和其他整洁内容的更多信息,请参阅https://github.com/bbatsov/clojure-style-guide

2)现在,您可以使用

将来电更改为map
(map (partial add-site site-names) my-rows)

这使您可以在REPL中使用add-site函数,如下所示:

user> (add-site {"hector" "www.hector.com"} {:f-username "hector"})
;; => {:f-username "hector", :sites "www.hector.com"}

您可能也想阅读此内容: https://stuartsierra.com/2015/08/10/clojure-donts-redundant-map

相关问题