2011-01-24 37 views
14

Có tương đương với Common Lisp's *features * trong Clojure, vì vậy bạn có thể phát hiện cấu hình hệ điều hành và môi trường khác không? Hay tôi chỉ cần đi qua API Java cho điều đó?Phát hiện hệ điều hành trong Clojure

Trả lời

17

Có thể sử dụng API Java. Nó đủ dễ dàng, không có ý nghĩa tái phát minh ra bánh xe.

user> (System/getProperty "os.name") 
"Linux" 
user> (System/getProperty "os.version") 
"2.6.36-ARCH" 
user> (System/getProperty "os.arch") 
"amd64" 
5

Để thêm vào câu trả lời Brian Carper, bạn có thể dễ dàng tạo ra một bản đồ của thuộc tính hệ thống qua API Java và ràng buộc nó vào biểu tượng tính năng:

(def *features* { 
    :name (System/getProperty "os.name"), 
    :version (System/getProperty "os.version"), 
    :arch (System/getProperty "os.arch")}) 

nào mang đến cho bạn cấu trúc này, ví dụ:

{:name "Windows 7", :version "6.1", :arch "x86"} 

sau đó truy cập vào một tài sản trong bất kỳ một trong các cách sau:

(:name *features*) 
(*features* :name) 
(get *features* :name) 

Cho dù nổi thuyền của bạn.

+3

'System.getProperties' trả về một Hashtable Java, vì vậy bạn cũng có thể làm '(vào {} (Hệ thống/getProperties))' để có được một bản đồ Clojure của chuỗi để chuỗi và kéo các thuộc tính ra theo cách đó. –

+0

@Brian Carper - Nice, cho thấy sự thiếu sử dụng Java thực sự của tôi. Điều đó nói rằng, 'System/getProperties' có thể trả về một lượng lớn thông tin, do đó, làm theo cách thủ công có thể giúp ai đó đến từ Lisp chỉ muốn một vài thuộc tính. – semperos

0

Các câu trả lời khác đang xử lý cách lấy thông tin hệ thống từ Java khá tốt. Nếu bạn muốn được giúp đỡ nhiều hơn nữa giải thích nó, đây là một số ví dụ về cách Terracotta đã làm điều đó:

Các vấn đề liên quan