我正在尋找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