Clojure :( double 0)vs(cast(class 0.0)0)

Chr*_*son 1 casting clojure

我正在尝试动态转换列表的值 - 我不需要,但我很好奇这里的问题是什么:

(double 0)           ; => 0.0

(class 0.0)          ; => java.lang.Double

(cast (class 0.0) 0) ; =>  ClassCastException Cannot cast java.lang.Long to 
                     ;     java.lang.Double java.lang.Class.cast
Run Code Online (Sandbox Code Playgroud)

我猜它与资本D有关Double.为什么我不能cast按照上面的代码尝试的方式?

ama*_*loy 5

这不是castClojure中的内容 - 它不是Java演员,因为这种演员在具有动态而非静态类型的语言中毫无意义.事实上,几乎从来没有理由打电话cast; 在Clojure编程的五年中,我当然没有.请参阅cast文档:它总是返回其输入,从不返回任何其他内容.它的唯一作用是如果输入与你想要转换的类不匹配则抛出异常.