2011-01-24 11 views
14

Czy w Clojure istnieje odpowiednik pliku Common Lisp o nazwie *features *, aby można było wykryć system operacyjny i inną konfigurację środowiska? Czy mogę po prostu przejść do tego API Java?Wykryj system operacyjny w Clojure

Odpowiedz

17

Prawdopodobnie używa Java API. To dość łatwe, nie ma sensu ponownie wymyślać koła.

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

Aby dodać odpowiedź Brian krytyk jest, można łatwo stworzyć mapę właściwości systemu za pośrednictwem interfejsu API Javy i powiązać go z symbolem możliwości:

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

co daje tę strukturę, na przykład:

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

Wtedy dostęp do właściwości któregokolwiek z następujących sposobów:

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

To, co płynie z łodzi.

+3

'System.getProperties' zwraca Java Hashtable, więc może również zrobić '(do {} (System/getProperties))', aby uzyskać Clojure mapę łańcuchów na ciągi i wyciągnąć właściwości w ten sposób. –

+0

@ Brian Carper - Nice, pokazuje mój brak prawdziwego użycia Java. To powiedziawszy, 'System/getProperties' może zwrócić dużą ilość informacji, więc zrobienie tego ręcznie może pomóc komuś z Lisp, który chce mieć kilka właściwości. – semperos

0

Inne odpowiedzi dotyczą radzenia sobie z uzyskiwaniem informacji systemowych z języka Java. Jeśli chcesz więcej pomocy interpretowania go, oto kilka przykładów, jak to zrobił z terakoty:

Powiązane problemy