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
.
进行适当的错误处理
我需要使用 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
.