Ecco lo Clojure documentation per Parole chiave e simboli.
Le parole chiave sono identificativi simbolici che valutano se stessi. Forniscono test di uguaglianza molto veloci ...
I simboli sono identificatori che vengono normalmente utilizzati per riferirsi a qualcos'altro. Possono essere utilizzati nei moduli del programma per fare riferimento ai parametri delle funzioni, lasciare associazioni, nomi di classi e vars globali ...
Le parole chiave sono generalmente utilizzate come "stringhe costanti" leggere, ad es. per le chiavi di una mappa hash o i valori di spedizione di un multimetodo. I simboli sono generalmente usati per denominare le variabili e le funzioni ed è meno comune manipolarli come oggetti direttamente tranne che nei macro e così via. Ma non c'è nulla che ti impedisca di usare un simbolo ovunque usi una parola chiave (se non ti dispiace citarli tutto il tempo).
Il modo più semplice per vedere la differenza è leggere Keyword.java
e Symbol.java
nella fonte Clojure. Ci sono alcune ovvie differenze di implementazione. Ad esempio, un simbolo in Clojure può avere metadati e una parola chiave non può.
In aggiunta alla sintassi dei singoli punti, è possibile utilizzare un doppio punto due per creare una parola chiave qualificata per lo spazio dei nomi.
user> :foo
:foo
user> ::foo
:user/foo
Comune Lisp ha parole chiave, così come Ruby e altre lingue. Sono leggermente diversi in quelle lingue, naturalmente. Alcune differenze tra parole chiave Common Lisp e Clojure:
Le parole chiave in Clojure non sono simboli.
user> (symbol? :foo)
false
Parole non appartengono a qualsiasi spazio dei nomi meno che non li qualificano: (. Grazie per avermi dato Rainer Joswig idee di cose da guardare)
user> (namespace :foo)
nil
user> (namespace ::foo)
"user"
fonte
2009-10-06 19:52:21
Vedere anche: [in Clojure, perché stringhe, parole chiave e simboli?] (Http://stackoverflow.com/q/11655080/405550) – Zaz