Consider the following code which attempts to redefine clojure/*out*:
(ns test (:refer-clojure)) (def output System/out) (def output-stream (let [buffer (new java.io.ByteArrayOutputStream)] (proxy [java.io.OutputStream] [] (flush [] (.append output (.toString buffer "UTF-8")) (.reset buffer)) (write [x] (when (>= (.size buffer) 32) (.flush this)) (.write buffer x)) (write [x off len] (.write buffer x off len))))) (in-ns 'clojure) (def *out* (new java.io.OutputStreamWriter test/output-stream "UTF-8")) This works, but according to the the documentation of clojure/proxy it seems that "If a method fn is not provided for a class method, the superclass methd will be called." [1] However if I omit the second write method in the proxy definition, I get the following error: user=> (load-file "test.clj") #=(var clojure/*out*) user=> (prn "hello") java.lang.IllegalArgumentException: Wrong number of args passed to: fn--2490$fn (NO_SOURCE_FILE:0) user=> (.printStackTrace *e) java.lang.IllegalArgumentException: Wrong number of args passed to: fn--2490$fn (NO_SOURCE_FILE:0) at clojure.lang.Compiler.eval(Compiler.java:4122) at clojure.lang.Repl.main(Repl.java:91) Caused by: java.lang.IllegalArgumentException: Wrong number of args passed to: fn--2490$fn at clojure.lang.AFn.throwArity(AFn.java:460) at clojure.lang.AFn.invoke(AFn.java:75) at clojure.lang.Proxy__2499.write(Unknown Source) at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202) at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272) at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276) at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122) at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212) at clojure.flush__906.invoke(boot.clj:1658) at clojure.prn__909.doInvoke(boot.clj:1667) at clojure.lang.RestFn.invoke(RestFn.java:413) at user.eval__2503.invoke(Unknown Source) at clojure.lang.Compiler.eval(Compiler.java:4111) ... 1 more -------------------------------- [1] http://clojure.org/java_interop#toc20 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---