Clojure读取错误" java.lang.String无法强制转换为java.lang.Number"

时间:2018-04-08 21:12:51

标签: clojure readline

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

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

给出错误:

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

1 个答案:

答案 0 :(得分:3)

仅此代码不会导致该错误。

read-line返回一个字符串,我猜你正试图在预期数字的上下文中使用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进行适当的错误处理。