2010-01-06 6 views
23

Uczę się clojure i mam bardzo podstawowe pytanie: biorąc pod uwagę, że clojure ma wnioskowanie o typie, jak rozpoznać klasę wywnioskowaną?Sprawdź klasę czegoś w clojure?

Na przykład Byłyby każdy wynik w różnych typów danych:

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

Czy istnieje jakiś class funkcji, która zwraca typ danych? Czy istnieje normalny sposób rzucania czegoś na konkretny typ? A więc w drugim przykładzie powyżej, co powinienem zrobić, gdybym chciał, aby wynik był unoszony?

Odpowiedz

32

Istnieje funkcja type w bibliotece clojure.core.

user> (type 2) 
java.lang.Integer 

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

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

Jeśli chcesz przekonwertować daną liczbę do pacy a następnie użyć float.

user> (float 10) 
10.0 
+1

Dang! 'type' nie znajduje się na arkuszu Clojure Cheat (), więc go nie znalazłem :( –

+7

Istnieje również' class'. 'type' w zasadzie sprawdza metadane (jeśli są jakieś) najpierw dla klucza: type, a następnie jako fallback 'class' – kotarak

+0

Bardzo prawdziwe! Bardzo przydatne. – aatifh

2

Podobnie może nie trzeba rzucić bo następujących prac:

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

Jednak to nie zbyt:

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