Clojure 读取行错误 "java.lang.String cannot be cast to java.lang.Number"

Clojure read-line error "java.lang.String cannot be cast to java.lang.Number"

我需要使用 read-line 输入数字:

(def x (read-line))
user => 1

给出错误:

CompilerException java.lang.ClassCastException: java.lang.String 无法转换为 java.lang.Number

该代码本身不会导致该错误。

read-line returns 一个字符串,我猜你正试图在需要数字的上下文中使用 x

要重现错误,您可以这样做:

(def x (read-line)) ; Enter 1
(+ 1 x) ; Same as (+ 1 "1"), which should make the problem obvious

ClassCastException java.lang.String cannot be cast to java.lang.Number  clojure.lang.Numbers.add (Numbers.java:128)

将其更改为使用 Long/parseLong(或类似函数):

(def x (Long/parseLong (read-line)))

您需要将 x 解析为数字(在本例中为 Long)才能用作数字。

(def x (Long/parseLong (read-line)))
(+ 1 x)

=> 2

当然,如果您尝试让它解析无法表示为数字的内容,Long/parseLong 将会抛出异常。在现实世界中,您需要通过 try.

进行适当的错误处理