2010-01-06 34 views
23

Tôi đang học clojure và có một câu hỏi rất cơ bản: cho rằng clojure có suy luận kiểu, làm thế nào bạn có thể nói những gì lớp được suy ra?Kiểm tra lớp của thứ gì đó trong clojure?

Ví dụ, những sẽ mỗi kết quả trong các loại dữ liệu khác nhau:

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

Có một số loại class hàm sẽ trả về kiểu dữ liệu? Ngoài ra, có cách nào bình thường để đúc một thứ gì đó thành một loại cụ thể không? Vì vậy, trong ví dụ thứ hai ở trên, tôi sẽ làm gì nếu tôi muốn kết quả nổi?

Trả lời

32

Có chức năng type trong thư viện clojure.core.

user> (type 2) 
java.lang.Integer 

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

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

Nếu bạn muốn chuyển đổi một số cho sẵn thành phao thì sử dụng float.

user> (float 10) 
10.0 
+1

Đặng! 'type' không nằm trong Clojure Cheat Sheet () vì vậy tôi không tìm thấy nó: ( –

+7

Ngoài ra còn có' class'. 'type' về cơ bản sẽ kiểm tra siêu dữ liệu (nếu có) đầu tiên cho: loại phím.Sau đó, như dự phòng 'lớp' được sử dụng – kotarak

+0

Rất đúng! Nó cũng rất hữu ích. – aatifh

2

Tương tự như vậy bạn có thể không cần phải cast vì các công việc sau:

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

Tuy nhiên, điều này không quá:

user> (str (/ 2 3)) 
"0.6666666666666667" 
Các vấn đề liên quan