前几天在Clojure repl中玩游戏,我遇到了这个。
user=> (/ 1/2)
2N
所以我尝试了这个:
user=> (type (/ 1/2))
clojure.lang.BigInt
有人知道这里发生了什么吗?
答案 0 :(得分:5)
1/2创建Ratio
,/
函数最终调用(clojure.lang.Numbers/divide 1 1/2)
。如果你看一下这个定义,它最终会调用(clojure.lang.Numbers$RatioOps/divide 1 1/2)
。这会将1L
提升为一个比率,执行比率除法,然后将2/1
的结果简化为BigInt
2。