Clojure报价与数字

时间:2013-10-30 12:41:08

标签: macros clojure

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

[编辑] 好吧,所以,你会笑,但我更喜欢笑话DSL,但现在我真的很好奇。

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

1 个答案:

答案 0 :(得分:3)

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

50x50%不是引用或不引用的有效符号或数字,因为数字不能以x或%结尾,而且符号不能以数字开头。它们也不是有效的字符串文字,因为字符串必须用双引号引用。另请参阅http://clojure.org/reader