首页 文章

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

提问于
浏览
0

我相信这是有效的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

我在这里错过了什么吗?

谢谢您的帮助!

Edit and Follow-up:

这绝对是一个Parinfer问题 . 这段代码:

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

当粘贴到Cursive REPL时,Parinfer打开会产生不正确的粘贴,并产生上面的ArityException . 相同的代码粘贴到同一个REPL中,Paredit打开或结构编辑关闭会产生预期的输出:

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

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

再次感谢您对此的帮助 .

1 回答

  • 2

    您的编辑器可能有一个slurp / barf命令,您使用键盘快捷键意外触发,但此复制/粘贴已出错 .

    你有 (( 这通常是一个坏兆头,除非在例子中正确完成:

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

    在你的情况下,缺少 filter 行的最后一个paren,而是放在函数的末尾 . 这意味着你正在调用一个带有0个参数的函数,但是你对 fn 的调用会生成一个带有1个参数的函数 x

相关问题