Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何确保输入是一个数字?_Clojure - Fatal编程技术网

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

Clojure 如何确保输入是一个数字?,clojure,Clojure,我使用{:pre[(number?input)]}函数来测试输入是否是一个数字;但是,当clojure不确定它是什么类型时,这会导致异常。例如: (编号?A) 无法解析符号 确保输入是数字的惯用方法是什么 编辑:在我阅读了文档并尝试了几次之后,再加上这篇文章中善意的回答,我发现一个更好的问题可能是如何处理异常。这样做的目的是防止某人输入类似a的内容(没有任何标点符号的字母a) 是的,函数(数字?一些值)可以很好地处理数字、字符串。但它不能像这样处理错误输入: A 输入时不带引号您确定它不工作吗

我使用{: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中,因此应该可以使用。谢谢。请问是哪种宏?