2010-01-06 4 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 ()에 없으므로 찾지 못했습니다 : ( –

+7

'class'도 있습니다.'type'은 기본적으로 메타 데이터를 검사합니다 (있는 경우).) : type 키에 우선 쓰다. 다음으로 fallback'class'가 사용된다. – kotarak

+0

매우 사실! 또한 매우 유용하다. – aatifh

2

마찬가지로 다음 작품 때문에 캐스팅이 필요하지 않을 수 있습니다

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

그러나,이 너무 수행합니다

user> (str (/ 2 3)) 
"0.6666666666666667" 
관련 문제