代码之家  ›  专栏  ›  技术社区  ›  ericky

传递的参数数(0)错误…错误?

  •  0
  • ericky  · 技术社区  · 7 年前

    我相信这是有效的Clojure代码,在Lein控制台REPL中运行良好,但在草书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
    

    我错过什么了吗?

    谢谢你的帮助!

    这绝对是一个帕林费尔问题。此代码:

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

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

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Brandon Henry    7 年前

    您的编辑器可能有一个用键盘快捷键意外触发的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 fn 生成接受1个参数的函数 x