我使用{:pre [(number?input)]}函数来测试输入是否为数字;但是,当clojure不确定它是什么类型时,这会导致异常。敌人的例子:
(数字?A)
无法解析符号......
确保输入是数字的惯用方法是什么?
编辑:在我阅读文档并尝试了几次之后,再加上本文中的善意答案,我发现可能更好的问题是如何处理异常。目的是防止有人输入类似 a 的字母(字母a没有任何标点符号)。
是的,函数(数字?some-value)适用于数字,字符串。但它不能像这样处理错误的输入:
一个 输入而不-带的标志
答案 0 :(得分:1)
你确定它不起作用吗?
(defn numbers-only [n] {:pre [(number? n)]}
(println "Yay!"))
(numbers-only "clojure")
AssertionError Assert failed: (number? n)
(numbers-only 27)
Yay!
也许你在pre
条件中错误输入了param的名字?
答案 1 :(得分:1)
Unable to resolve symbol
是编译时异常。未定义的符号无法通过函数进行测试,因为表达式无法编译。
你真的想测试不能解析为任何东西的随机符号,或者你只是试验repl?我怀疑后者,但如果由于某种原因你想要前者,你需要一个宏。