2010-01-06 56 views
23

我正在學習clojure,並有一個非常基本的問題:鑑於clojure有類型推斷,你怎麼知道什麼類是推斷?檢查clojure中的東西類嗎?

例如,這些每一個都將導致不同的數據類型:

(2) 
(/ 2 3) 
(/ 2.0 3) 

是否有某種class功能,將返回的數據類型?另外,是否有一種正常的方式來將某些東西轉換爲特定的類型?所以在上面的第二個例子中,如果我想要結果是浮動的,我該怎麼辦?

回答

32

clojure.core庫中有type函數。

user> (type 2) 
java.lang.Integer 

user> (type (/ 2 3)) 
clojure.lang.Ratio 

user> (type (/ 2.0 3)) 
java.lang.Double 

如果您想將給定的數字轉換爲浮點數,則使用float

user> (float 10) 
10.0 
+1

黨! 'type'不在Clojure Cheat Sheet()上,所以我沒有找到它:( – 2010-01-06 11:47:29

+7

還有'class'''type''基本上檢查元數據(如果有的話) )首先爲:type鍵,然後使用'fallback'類。 – kotarak 2010-01-06 12:33:32

+0

非常真實!它也非常有用。 – aatifh 2010-01-06 12:36:37

2

同樣,你可能並不需要,因爲投了以下工作:

user> (Double/toString (/ 2 3)) 
"0.6666666666666667" 

然而,這確實太:

user> (str (/ 2 3)) 
"0.6666666666666667"