在 Clojure 中,将带有前导 0 的数字传递给 str 会导致奇怪的行为。这是什么特点?

Sir*_*rge 2 string clojure read-eval-print-loop output

所以,我在玩弄一些字符串时无意中发现了这一点。

(str 111) => "111"
(str 0111) => "73"
Run Code Online (Sandbox Code Playgroud)

这是什么?

Mar*_*ůda 5

0前缀为进制的数字:

0111
=> 73
Run Code Online (Sandbox Code Playgroud)

前缀为 的数字0x十六进制

0x111
=> 273
Run Code Online (Sandbox Code Playgroud)

以 为前缀的数字Xr(其中 X 是从 2 到 36 的数字)具有以下基数:

2r111
=> 7
Run Code Online (Sandbox Code Playgroud)

如果您想用零填充数字,请参阅formatcl-format

(format "%04d" 111)
=> "0111"

(clojure.pprint/cl-format nil "~4,'0d" 111)
=> "0111"
Run Code Online (Sandbox Code Playgroud)