2011-01-24 15 views
14

¿Hay un equivalente de *features * de Common Lisp en Clojure, por lo que puede detectar el sistema operativo y otras configuraciones de entorno? ¿O simplemente reviso la API de Java para eso?Detectar sistema operativo en Clojure

Respuesta

17

Probablemente use la API de Java. Es bastante fácil, no tiene sentido reinventar la rueda.

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

Para añadir a la respuesta de Brian Carper, fácilmente se podría crear un mapa de las propiedades del sistema a través de la API de Java y ligarlo al símbolo características:

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

que le da esta estructura, por ejemplo:

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

luego acceder a una propiedad en cualquiera de las siguientes maneras:

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

Cualquiera que sea su flotador.

+3

'System.getProperties' devuelve una tabla hash de Java, por lo que también puede hacer '(into {} (System/getProperties))' para obtener un mapa Clojure de cadenas para cadenas y extraer las propiedades de esa manera. –

+0

@Brian Carper - Agradable, muestra mi falta de uso real de Java. Dicho esto, 'System/getProperties' puede devolver una gran cantidad de información, por lo que hacerlo manualmente podría ayudar a alguien proveniente de Lisp que solo quiere unas pocas propiedades. – semperos

0

Otras respuestas están manejando bastante bien cómo obtener la información del sistema de Java. Si desea obtener más ayuda interpretarlo, he aquí algunos ejemplos de cómo terracota hizo eso:

Cuestiones relacionadas