8

この振る舞いは私には意味がありません:

user=> (type 1)
java.lang.Long
user=> (type (cast Long 1))
java.lang.Long
user=> (type 1)
java.lang.Long
user=> (type (Long. 1))
java.lang.Long
user=> (type (cast Long 1))
java.lang.Long
user=> (BigDecimal. 1)
1M
user=> (BigDecimal. (Long. 1))
CompilerException java.lang.IllegalArgumentException: More than one matching method found: java.math.BigDecimal, compiling:(NO_SOURCE_PATH:22) 
user=> (BigDecimal. (cast Long 1))
1M

(BigDecimal. (Long. 1))まったく同じ引数タイプを持つ他の2つの式が成功するのに、ケースが明確な一致メソッドシグネチャを見つけられないのはなぜですか?


アップデート:

この振る舞いについて私がさらにLong奇妙だと思うのは、それがタイプに特有のように見えることです。

user=> (BigDecimal. (Long. 1))
CompilerException java.lang.IllegalArgumentException: More than one matching method found: java.math.BigDecimal, compiling:(NO_SOURCE_PATH:1) 
user=> (BigDecimal. (Integer. 1))
1M
4

2 に答える 2

1

BigDecimalにはLongのコンストラクターがありません。

BigDecimal(BigInteger val)

core> (BigDecimal. (BigInteger/ONE))
1M

BigDecimal(BigInteger unscaledVal、int scale)

core> (BigDecimal. BigInteger/ONE 1)
0.1M

BigDecimal(double val)

core> (BigDecimal. (double 1))
1M
core> (BigDecimal. (float 1))
1M
(BigDecimal. Double/MIN_VALUE)

BigDecimal(String val)

core> (BigDecimal. "1")
1M

これらの(Long. 1)一致のどれかは不明です。関数は、BigDecimalを作成するためにclojure.core.bigdec入力を渡すことにより、この入力で機能しますBigDec/valueOf

core>  (bigdec (Long. 1))
1M

この呼び出しを使用します:

(BigDecimal/valueOf (long x))
于 2012-09-25T19:06:47.527 に答える