2024 Clojure状态调查!中分享你的想法。

欢迎!请查看关于页面以获取更多关于如何使用本站的信息。

0
Java互操作性

附件中的程序可以重现这个问题。我们有一个代理,称为read的方法:抽象方法int read(); int read(byte(bytereference) b); 和 int read(byte(bytereference) b, int off, int len);请参阅http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html。在代理read,使得

第一次调用,(. p read),返回-1,这是预期的。

第二次调用,(. p (read b 0 n))应调用java.io.InputStream中的int read(byte(bytereference) b, int off, int len);。但这些是实际行为

$ clojure1.2 ~/tmp/proxy-bug.clj
线程“main”中发生异常:java.lang.IllegalArgumentException:传递给user$eval1$fn的错误参数数量(4)(proxy-bug.clj:0)

    at clojure.lang.Compiler.eval(Compiler.java:5441)
    at clojure.lang.Compiler.load(Compiler.java:5858)
    at clojure.lang.Compiler.loadFile(Compiler.java:5821)
    at clojure.main$load_script.invoke(main.clj:221)
    at clojure.main$script_opt.invoke(main.clj:273)
    at clojure.main$main.doInvoke(main.clj:354)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.lang.Var.invoke(Var.java:365)
    at clojure.lang.AFn.applyToHelper(AFn.java:161)
    at clojure.lang.Var.applyTo(Var.java:482)
    at clojure.main.main(main.java:37)

原因:线程“main”java.lang.IllegalArgumentException:传递给user$eval1$fn的错误参数数量(4)

    at clojure.lang.AFn.throwArity(AFn.java:437)
    at clojure.lang.AFn.invoke(AFn.java:51)
    at user.proxy$java.io.InputStream$0.read(Unknown Source)
    at user$eval1.invoke(proxy-bug.clj:9)
    at clojure.lang.Compiler.eval(Compiler.java:5425)
    ... 10 more

$ clojure1.2 ~/tmp/proxy-bug.clj
线程“main”中发生异常:java.lang.IllegalArgumentException:传递给user$eval1$fn的错误参数数量(4)(proxy-bug.clj:0)

    at clojure.lang.Compiler.eval(Compiler.java:5441)
    at clojure.lang.Compiler.load(Compiler.java:5858)
    at clojure.lang.Compiler.loadFile(Compiler.java:5821)
    at clojure.main$load_script.invoke(main.clj:221)
    at clojure.main$script_opt.invoke(main.clj:273)
    at clojure.main$main.doInvoke(main.clj:354)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.lang.Var.invoke(Var.java:365)
    at clojure.lang.AFn.applyToHelper(AFn.java:161)
    at clojure.lang.Var.applyTo(Var.java:482)
    at clojure.main.main(main.java:37)

原因:线程“main”java.lang.IllegalArgumentException:传递给user$eval1$fn的错误参数数量(4)

    at clojure.lang.AFn.throwArity(AFn.java:437)
    at clojure.lang.AFn.invoke(AFn.java:51)
    at user.proxy$java.io.InputStream$0.read(Unknown Source)
    at user$eval1.invoke(proxy-bug.clj:9)
    at clojure.lang.Compiler.eval(Compiler.java:5425)
    ... 10 more

3 个答案

0

[email protected]发表的评论

第二种行为应在Clojure 1.3中

$ clojure1.3 ~/tmp/proxy-bug.clj
线程“main”中发生异常:clojure.lang.ArityException:传递给user$eval1$fn的错误参数数量(4)

    at clojure.lang.AFn.throwArity(AFn.java:437)
    at clojure.lang.AFn.invoke(AFn.java:51)
    at user.proxy$java.io.InputStream$0.read(Unknown Source)
    at user$eval1.invoke(proxy-bug.clj:9)
    at clojure.lang.Compiler.eval(Compiler.java:6468)
    at clojure.lang.Compiler.load(Compiler.java:6905)
    at clojure.lang.Compiler.loadFile(Compiler.java:6866)
    at clojure.main$load_script.invoke(main.clj:282)
    at clojure.main$script_opt.invoke(main.clj:342)
    at clojure.main$main.doInvoke(main.clj:426)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.lang.Var.invoke(Var.java:401)
    at clojure.lang.AFn.applyToHelper(AFn.java:161)
    at clojure.lang.Var.applyTo(Var.java:518)
    at clojure.main.main(main.java:37)

对此造成的任何不便表示歉意。

0

由mullr发表的评论

已验证,在Clojure 1.5.1中

`
clojure.lang.ArityException:传递给user$eval147$fn的错误参数数量(4)

                                  AFn.java:437 clojure.lang.AFn.throwArity
                                   AFn.java:51 clojure.lang.AFn.invoke
                              (Unknown Source) user.proxy/java.io.InputStream[fn]
                              NO_SOURCE_FILE:9 user/eval147
                            Compiler.java:6619 clojure.lang.Compiler.eval
                            Compiler.java:6582 clojure.lang.Compiler.eval
                                 core.clj:2852 clojure.core/eval
                                  main.clj:259 clojure.main/repl[fn]
                                  main.clj:259 clojure.main/repl[fn]
                                  main.clj:277 clojure.main/repl[fn]
                                  main.clj:277 clojure.main/repl
                              RestFn.java:1096 clojure.lang.RestFn.invoke
                     interruptible_eval.clj:56 clojure.tools.nrepl.middleware.interruptible-eval/evaluate[fn]
                                  AFn.java:159 clojure.lang.AFn.applyToHelper
                                  AFn.java:151 clojure.lang.AFn.applyTo
                                  core.clj:617 clojure.core/apply
                                 core.clj:1788 clojure.core/with-bindings*
                               RestFn.java:425 clojure.lang.RestFn.invoke
                     interruptible_eval.clj:41 clojure.tools.nrepl.middleware.interruptible-eval/evaluate
                    interruptible_eval.clj:171 clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval[fn]
                                 core.clj:2330 clojure.core/comp[fn]
                    interruptible_eval.clj:138 clojure.tools.nrepl.middleware.interruptible-eval/run-next[fn]
                                   AFn.java:24 clojure.lang.AFn.run
                  ThreadPoolExecutor.java:1110 java.util.concurrent.ThreadPoolExecutor.runWorker
                   ThreadPoolExecutor.java:603 java.util.concurrent.ThreadPoolExecutor$Worker.run
                               Thread.java:722 java.lang.Thread.run

`

0
by
参考: https://clojure.atlassian.net/browse/CLJ-1001(由 alex+import 报告的)
...