我想做 64 位算术(不是自然数),所以我例如需要两个长整型的乘法才能悄无声息地溢出。
(unchecked-multiply Long/MAX_VALUE 3)
就可以了。但是
(def n Long/MAX_VALUE)
(unchecked-multiply n 3)
给出溢出异常。我做错了什么?
(Clojure 1.5.1)
最佳答案
在第一种情况下,两个参数均未装箱 long
s,所以(long, long)
过载clojure.lang.Numbers.unchecked_multiply
用来。正如预期的那样,它不会引发溢出。
在第二种情况下,n
已装箱,因此 (Object, Object)
调用重载,并且简单地将其委托(delegate)给 multiply
抛出溢出的方法。
你需要说
(unchecked-multiply (long n) 3)
这样(long, long)
使用了重载。
关于Clojure,我希望长乘法溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18699292/