2

我无法弄清楚为什么 '50% 和 '50x 在 clojure 中抛出异常。我想制作一个接受 50% 作为参数的宏,但我不断收到异常。有可能吗?怎么做?

[编辑] 好的,所以,你会笑,但我做这件事更多是为了玩 DSL,但现在我真的很好奇。

(defmacro chance [x]
   (let [y (Integer/parseInt (clojure.string/replace (str x) "%" ""))]
     `(> ~y (rand-int 100))))
4

1 回答 1

3

你不能只引用任何字符序列,你只能引用有效的 Clojure形式;引用的表达式必须(read)能够并且必须是单个表达式。

50x并且50%不是有效的符号或数字,无论是否引用,因为数字可能不以 x 或 % 结尾,并且符号可能不以数字开头。它们也不是有效的字符串文字,因为字符串必须用双引号引起来。另见http://clojure.org/reader

于 2013-10-30T12:55:19.867 回答