2017-08-02 91 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是最糟糕的! –

相關問題