传递的 args (0) 数量错误...错误?

Wrong number of args (0) passed... Error?

我相信这是有效的 Clojure 代码 - 并且在 Lein 控制台 REPL 中运行良好 - 但 Cursive REPL 中的错误:

Connecting to local nREPL server...
Clojure 1.8.0
nREPL server started on port 41303 on host 127.0.0.1 - nrepl://127.0.0.1:41303
*ns*
=> #object[clojure.lang.Namespace 0x4394b860 "user"]
(defn concat-some
  [f vec1 vec2]
  ((fn [x] (filter f x)
    (concat vec1 vec2))))
=> #'user/concat-some
(concat-some even? [1 2 3] [4 5 6])
clojure.lang.ArityException: Wrong number of args (0) passed to: user/concat-some/fn--4953

我是不是遗漏了什么?

感谢您的帮助!

编辑和跟进:

这绝对是一个Parinfer问题。此代码:

(defn concat-some
  [f vec1 vec2]
  ((fn [x] (filter f x))
    (concat vec1 vec2)))
(concat-some even? [1 2 3] [4 5 6])

在启用 Parinfer 的情况下粘贴到 Cursive REPL 时会产生不正确的粘贴,并导致上面的 ArityException。在打开 Paredit 或关闭结构编辑的情况下将相同的代码粘贴到相同的 REPL 中会产生预期的输出:

;; => #'user/concat-some
;; => (2 4 6)

我不知道编辑器和 REPL 中使用了在 Cursive 中处于活动状态的结构编辑。我仍然希望无论模式如何,有效代码都是有效代码,并且想知道这是否是粘贴到 Cursive/Parinfer REPL 中的预期结果。(?)

再次感谢您对此的帮助。

您的编辑器可能有一个 slurp/barf 命令是您不小心用键盘快捷键触发的,但是这个 copy/paste 已经出错了。

你有 (( 这通常是一个不好的迹象,除非像示例中那样正确地完成:

(defn concat-some
  [f vec1 vec2]
  ((fn [x] (filter f x))
   (concat vec1 vec2)))
(concat-some even? [1 2 3] [4 5 6])

在你的 filter 行的最后一个括号丢失了,而是放在函数的末尾。这意味着您正在调用一个带有 0 个参数的函数,但是您对 fn 的调用生成一个带有 1 个参数的函数 x