2017-08-02 58 views
0

我相信这是有效的Clojure代码 - 并在雷音控制台REPL运行良好 - 但错误狂草REPL里面:错误数量的参数(0)已通过...错误?

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]) 

当粘贴到草书REPL与Parinfer开启产生一个不正确的粘贴和上述所得ArityException。粘贴到同一REPL与Paredit相同的代码开启或结构化编辑关闭将产生预期的输出:

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

我不知道,结构化编辑时行草活跃在编辑器中使用 - 和REPL。我仍然希望有效的代码是有效的代码,不管模式是什么,并且不知道这是否是粘贴到草书/ Parinfer REPL中的预期结果(?)

再次感谢您对此的帮助。

+3

这在您的Lein repl中也不起作用。你错误地复制了粘贴,结果你的保姆错位了。 – amalloy

+0

请参阅上面的修改。 – ericky

回答

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缺失,而在功能月底建成,而不是。这意味着您正在调用一个带有0个参数的函数,但您致电fn产生的函数需要1个参数。x

+0

是的,这是一个错误的粘贴。我现在看到上面评估的代码是不正确的,但是它是来自ClojureBridge的正确代码的粘贴。我在想这种差异可能是由于我在草书中使用的Parinfer。 – ericky

+0

OH绝对! Parinfer是最糟糕的! –

相关问题