附件中的程序可以重现这个问题。我们有一个代理,称为
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