传递给repl $ repl的参数数量错误

3

我在 compojure 的 "入门" 示例中遇到了困难,不太理解。当我从http://weavejester.github.com/compojure/docs/getting-started.html 运行示例时...

...在执行 lein repl 步骤时出现以下错误:

~/hello-www> lein repl src/hello_www/core.clj
Exception in thread "main" java.lang.IllegalArgumentException: Wrong number of args passed to: repl$repl (NO_SOURCE_FILE:0)
    at clojure.lang.Compiler.eval(Compiler.java:5359)
    at clojure.lang.Compiler.eval(Compiler.java:5311)
    at clojure.core$eval__4350.invoke(core.clj:2364)
    at clojure.main$eval_opt__6502.invoke(main.clj:228)
    at clojure.main$initialize__6506.invoke(main.clj:247)
    at clojure.main$script_opt__6526.invoke(main.clj:263)
    at clojure.main$main__6544.doInvoke(main.clj:347)
    at clojure.lang.RestFn.invoke(RestFn.java:483)
    at clojure.lang.Var.invoke(Var.java:381)
    at clojure.lang.AFn.applyToHelper(AFn.java:180)
    at clojure.lang.Var.applyTo(Var.java:482)
    at clojure.main.main(main.java:37)
Caused by: java.lang.IllegalArgumentException: Wrong number of args passed to: repl$repl
    at clojure.lang.AFn.throwArity(AFn.java:439)
    at clojure.lang.AFn.invoke(AFn.java:43)
    at clojure.lang.Var.invoke(Var.java:369)
    at clojure.lang.AFn.applyToHelper(AFn.java:165)
    at clojure.lang.Var.applyTo(Var.java:482)
    at clojure.core$apply__3776.invoke(core.clj:535)
    at leiningen.core$_main__59$fn__61.invoke(core.clj:94)
    at leiningen.core$_main__59.doInvoke(core.clj:91)
    at clojure.lang.RestFn.applyTo(RestFn.java:138)
    at clojure.core$apply__3776.invoke(core.clj:535)
    at leiningen.core$_main__59.invoke(core.clj:97)
    at user$eval__67.invoke(NO_SOURCE_FILE:1)
    at clojure.lang.Compiler.eval(Compiler.java:5343)
    ... 11 more

我尝试了稳定版和开发者版本的lein,但都没有成功。有什么建议可以帮助我解决问题吗?我在linux和cygwin上都得到了相同的结果。

当我手动运行时,在linux上似乎可以正常工作:

java -cp "lib/*" clojure.main  src/hello_www/core.clj
2010-05-17 19:34:17.280::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2010-05-17 19:34:17.281::INFO:  jetty-6.1.14
2010-05-17 19:34:17.382::INFO:  Started SocketConnector@0.0.0.0:8080

我检查了使用Leiningen 1.1时,您提供的链接教程可以正常工作。您是否正确设置了lein-stable?(一种检查方法是删除您在lein's HEAD中检出的lib/目录,然后尝试运行lein-stable deps来检查。) - Michał Marczyk
我使用了最新的Git版本的Leiningen 1.2。使用lein-stable可以正常工作,但是使用Git主分支就无法工作。请注意,我按照“Hacking”指南的步骤进行操作,先使用稳定版引导程序,然后再连接Git主分支版本。 - grm
1个回答

2
考虑到你在问题上的评论——相关部分是“使用lein-stable可以,但使用git中的master版本不行。”——我想说你受到了Leiningen对repl任务的新处理方式的影响。这个处理方式是在2010年4月16日提交的44b6369aec1e23bcda1db1b6570a03ca524464e5。
Leiningen 1.1发布于2月16日,按照旧方式进行操作,这意味着lein脚本会特别处理repl任务;在44b6369aec之后,Leiningen会像其他所有任务一样处理repl任务,即通过leiningen.repl/repl函数处理。后者简单地不接受附加参数,因此你看到了与函数参数相关的IllegalArgumentException异常。在你问之前,我不确定这种情况是否可能会在未来发生改变。
应该能够正常工作的是先输入“lein repl”,然后再输入“(require 'hello-www.core)”;遗憾的是,Leiningen的HEAD存在问题,阻止了这个过程(至少在我的电脑上)。可以肯定的是,它最终会被修复,但目前可以使用lein-stable。Compojure教程使用Clojure 1.1而不是最新版本……把Leiningen当作同样的处理方式可能会节省你一些时间。

谢谢Michal。我会听从你的建议。 - grm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接