如何在Clojure中设置默认数字格式?

Wil*_*hin 2 clojure

我正在使用Clojure处理一些二进制格式,其中检查十六进制格式的数字是有意义的(0x10).如何配置Clojure以将数字呈现为十六进制,默认情况下?在REPL中,这可能与我最相关,但我也对更一般的机制感兴趣.

Pio*_*dyl 7

Clojure使用多种方法打印数据:( print-method旨在提供人类可以读取的输出)和print-dup(产生可以通过读取解析的输出).

因此,对于REPL,您可以java.lang.Number在下面的REPL会话中简单地为s 提供print-method的实现:

123
=> 123

(prn 123)
123
=> 123

(defmethod print-method Number
  [n ^java.io.Writer w]
  (.write w (format "0x%X" n)))
=> #object[clojure.lang.MultiFn 0x52ad430a "clojure.lang.MultiFn@52ad430a"]

123
=> 0x7B

(prn 123)
0x7B
=> nil
Run Code Online (Sandbox Code Playgroud)