我无法弄清楚为什么 '50% 和 '50x 在 clojure 中抛出异常。我想制作一个接受 50% 作为参数的宏,但我不断收到异常。有可能吗?怎么做?
[编辑] 好的,所以,你会笑,但我做这件事更多是为了玩 DSL,但现在我真的很好奇。
(defmacro chance [x]
(let [y (Integer/parseInt (clojure.string/replace (str x) "%" ""))]
`(> ~y (rand-int 100))))
你不能只引用任何字符序列,你只能引用有效的 Clojure形式;引用的表达式必须(read)
能够并且必须是单个表达式。
50x
并且50%
不是有效的符号或数字,无论是否引用,因为数字可能不以 x 或 % 结尾,并且符号可能不以数字开头。它们也不是有效的字符串文字,因为字符串必须用双引号引起来。另见http://clojure.org/reader