Clojure 如何确保输入是一个数字?
我使用{:pre[(number?input)]}函数来测试输入是否是一个数字;但是,当clojure不确定它是什么类型时,这会导致异常。例如: (编号?A) 无法解析符号 确保输入是数字的惯用方法是什么 编辑:在我阅读了文档并尝试了几次之后,再加上这篇文章中善意的回答,我发现一个更好的问题可能是如何处理异常。这样做的目的是防止某人输入类似a的内容(没有任何标点符号的字母a) 是的,函数(数字?一些值)可以很好地处理数字、字符串。但它不能像这样处理错误输入: AClojure 如何确保输入是一个数字?,clojure,Clojure,我使用{:pre[(number?input)]}函数来测试输入是否是一个数字;但是,当clojure不确定它是什么类型时,这会导致异常。例如: (编号?A) 无法解析符号 确保输入是数字的惯用方法是什么 编辑:在我阅读了文档并尝试了几次之后,再加上这篇文章中善意的回答,我发现一个更好的问题可能是如何处理异常。这样做的目的是防止某人输入类似a的内容(没有任何标点符号的字母a) 是的,函数(数字?一些值)可以很好地处理数字、字符串。但它不能像这样处理错误输入: A 输入时不带引号您确定它不工作吗
输入时不带引号您确定它不工作吗
(defn numbers-only [n] {:pre [(number? n)]}
(println "Yay!"))
(numbers-only "clojure")
AssertionError Assert failed: (number? n)
(numbers-only 27)
Yay!
可能您在
pre
条件中输入了错误的参数名称?无法解析符号
是编译时异常。函数无法测试未定义的符号,因为表达式不会编译
你真的想测试那些不能解决任何问题的随机符号,还是只是在repl中进行实验?我怀疑是后者,但如果出于某种原因您想要前者,您需要一个宏。
number?
存在于clojure.core中,因此应该可以使用。谢谢。请问是哪种宏?