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
-~----------~----~----~----~------~----~------~--~---

Reply via email to