如何确保输入是一个数字?

时间:2014-11-12 07:32:14

标签: clojure

我使用{:pre [(number?input)]}函数来测试输入是否为数字;但是,当clojure不确定它是什么类型时,这会导致异常。敌人的例子:

(数字?A)

无法解析符号......

确保输入是数字的惯用方法是什么?

编辑:在我阅读文档并尝试了几次之后,再加上本文中的善意答案,我发现可能更好的问题是如何处理异常。目的是防止有人输入类似 a 的字母(字母a没有任何标点符号)。

是的,函数(数字?some-value)适用于数字,字符串。但它不能像这样处理错误的输入:

一个 输入而不-带的标志

2 个答案:

答案 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?我怀疑后者,但如果由于某种原因你想要前者,你需要一个宏。