2012-04-03 5 views
5

Mi piacerebbe utilizzare il metodo Java: R untime.getRuntime().availableProcessors() e salvare il risultato in una variabile intera.Numero di processori in Clojure? Java interop

Quindi, in Clojure ho fatto questo:

(def n-cpu ((.availableProcessors (Runtime/getRuntime)))) 

e questo:

(def n-cpu (Integer/parseInt ((.availableProcessors (Runtime/getRuntime))))) 

ma nessuna funziona.

Qualche suggerimento?

risposta

15

Se si sostituisce la chiamata di metodo nella versione con un numero intero, questo è quello che logicamente ha:

(def n-cpu (4)) 

Clojure non è in grado di gestire la lista (4) perché il primo elemento in un elenco non citato deve essere un funzione. In questo caso il primo elemento è un numero intero e Clojure non considera gli interi come funzioni. Se si rimuove le parentesi inutili, la vostra definizione var sarebbe simile a questa:

(def n-cpu (.availableProcessors (Runtime/getRuntime))) 

Notate come se si sostituisce la chiamata di metodo con un numero intero, diventa (def n-cpu 4)?

+0

Grazie ancora per il vostro aiuto! – nuvio