我正在寻找Clojure中何时使用Clojure BigInt与Java BigInteger的指导。两者都工作得很好,我假设使用BigInt的主要原因是利用诸如+
和=
等运算符,这些运算符必须通过Java实例方法.add
和.equals
进行访问。但是我只能从BigInteger访问的运营商很少,如isProbablePrime
。BigInt与BigInteger在Clojure中的使用案例
从BigInt转换到BigInteger似乎很容易,反之亦然,但两者的存在使得用例不清楚。在没有明确标准的情况下,我的膝盖反应只是坚持BigInteger,因为一些建议的用法看起来不起作用。从clojuredocs here:
user=> (def x (bigint 97))
user=> (.isProbablePrime x 1)
IllegalArgumentException No matching method found: isProbablePrime for class
clojure.lang.BigInt clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:53)
查看BigInt的源代码(https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/BigInt.java)后,它看起来像一个BigInt包含两个java.math.Bigint和long。在Clojure网页上,它表示BigInts在所有操作中保持其类型。考虑到你可以使用.toBigInteger和.fromBigInteger轻松进行投射,以防你想使用isProbablePrime等方法,同时考虑到构建java.math.BigInteger并不容易,我会坚持使用bigint并投射出来如果必要的话回来(BigInts自己做,例如.add)。 –
它实际上是'clojure.lang.BigInt/fromBigInteger';我在这里添加了一个例子http://clojuredocs.org/clojure_core/clojure.core/bigint –
您是否偶然使用卢卡斯数字? – Carcigenicate