我需要使用read-line输入一个数字:
(def x (read-line))
user => 1
给出错误:
CompilerException java.lang.ClassCastException:java.lang.String无法强制转换为java.lang.Number
答案 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
进行适当的错误处理。