2010-01-06 15 views
23

Ben clojure öğreniyorum ve çok basit bir soruya sahibim: clojure'un bir tür çıkarımı olduğu göz önüne alındığında, hangi sınıfın çıkarıldığını nasıl anlayabilirsiniz? Örneğinclojure'da bir şeyin sınıfını kontrol et?

, bu olur, farklı veri tiplerinde her sonuç:

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

veri türü dönecektir class fonksiyonun çeşit var mı? Ayrıca, belirli bir tür olmak için bir şeyi yayınlamanın normal bir yolu var mı? Yani yukarıdaki ikinci örnekte, sonucun yüzmesini istediğimde ne yapmalıyım?

cevap

32

clojure.core kitaplığında type işlevi var. Eğer bir şamandıra içine belirli bir sayıda dönüştürmek istiyorsanız

user> (type 2) 
java.lang.Integer 

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

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

sonra float kullanın.

user> (float 10) 
10.0 
+1

Dang! 'type' Clojure Hile Sayfasında () bulunmadı, ben de bulamadım :( –

+7

Ayrıca 'class'.' type' da meta verileri (eğer varsa) kontrol eder.): ilk önce: tip anahtar, sonra 'geri dönüş' sınıfı kullanılır – kotarak

+0

Çok doğru! Aynı zamanda çok kullanışlı. – aatifh

2

Benzer aşağıdaki işler çünkü döküm gerekmeyebilir:

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

Ancak bu da yapar:

user> (str (/ 2 3)) 
"0.6666666666666667" 
İlgili konular