Anahtar Kelimeler ve Semboller için Clojure belgeleri burada .
Anahtar kelimeler, kendilerini değerlendiren sembolik tanımlayıcılardır. Çok hızlı eşitlik testleri sağlarlar ...
Semboller, normalde başka bir şeye atıfta bulunmak için kullanılan tanımlayıcılardır. Program formlarında fonksiyon parametrelerine, let bağlamalarına, sınıf isimlerine ve global değişkenlere atıfta bulunmak için kullanılabilirler ...
Anahtar kelimeler genellikle hafif "sabit dizeler" olarak kullanılır, örneğin bir karma haritanın anahtarları veya bir çoklu yöntemin gönderme değerleri için. Semboller genellikle değişkenleri ve işlevleri adlandırmak için kullanılır ve makrolar ve benzeri durumlar dışında bunları doğrudan nesne olarak değiştirmek daha az yaygındır. Ancak, bir anahtar kelimeyi kullandığınız her yerde bir sembolü kullanmaktan sizi alıkoyan hiçbir şey yoktur (eğer her zaman alıntı yapmaktan çekinmezseniz).
Farkı görmek için en kolay yolu okumaktır Keyword.java
ve Symbol.java
Clojure kaynağındaki. Birkaç bariz uygulama farkı vardır. Örneğin, Clojure'daki bir Sembol meta veriye sahip olabilir ve bir Anahtar Sözcük olamaz.
Tek iki nokta üst üste sözdizimine ek olarak, ad alanı nitelikli bir anahtar sözcük oluşturmak için çift iki nokta üst üste kullanabilirsiniz.
user> :foo
:foo
user> ::foo
:user/foo
Common Lisp, Ruby ve diğer dillerde olduğu gibi anahtar kelimelere sahiptir. Elbette bu dillerde biraz farklılar. Common Lisp anahtar kelimeleri ve Clojure anahtar kelimeleri arasındaki bazı farklılıklar:
Clojure'daki anahtar kelimeler Sembol değildir.
user> (symbol? :foo)
false
Özel olarak nitelendirmediğiniz sürece anahtar kelimeler herhangi bir ad alanına ait değildir:
user> (namespace :foo)
nil
user> (namespace ::foo)
"user"
( Bakmam gereken şeyler hakkında bana fikir verdiği için Rainer Joswig'e teşekkürler .)