SORU
6 EKİM 2009, Salı


Neden Clojure "anahtar" ayrıca "semboller" var mı;?

Eskilerden, diğer Lisps (özellikle Düzeni) geçen bir bilgi var. Son zamanlarda Clojure hakkında bir şeyler okuyordum. Her ikisi de olduğunu görüyorum "semboller" ve "". anahtar kelimeler Semboller aşina, ama sözcükler değilim.

Diğer Lisps anahtar kelimeler var mı? Anahtar kelimeler semboller farklı gösterimde olan daha farklı (örn: iki nokta üst üste)?

CEVAP
6 EKİM 2009, Salı


İşte anahtar Kelimeler ve Semboller için Clojure documentation.

Anahtar kelimeler kendilerini değerlendirmek için sembolik ve göreceli. Çok hızlı eşitlik testleri sağlar...

Semboller normalde başka bir şeyi ifade etmek için kullanılan tanımlayıcıları vardır. Program formları fonksiyon parametreleri, izin bağlamaları, sınıf adları ve genel değişkenleri ifade etmek için kullanılmış olabilir

Anahtar kelimeler genellikle hafif olarak "sabit dize", örneğin, karma harita tuşlarını veya multimethod. değerleri gönderme kullanılır Semboller genellikle değişken ve fonksiyonları adı için kullanılır ve daha az yaygın makrolar dışında nesneler olarak bunları doğrudan işlemek için. Ama hiçbir şey bir sembol kullanarak sizi durdurma bir kelime varsa hepsini alıntı sakıncası yoksa...) kullandığınız her yerde var.

Farkı görmek için en kolay yolu Keyword.java ve Clojure kaynağı Symbol.java okumaktır. Birkaç uygulama açık bir fark vardır. Örneğin Clojure bir Sembol meta veri ve Anahtar sözcük.

Tek kolon için ayrıca sözdizimi, çift kolon bir ad alanıyla nitelenmiş bir kelime yapmak için kullanabilirsiniz.

user> :foo
:foo
user> ::foo
:user/foo

Common Lisp, Ruby ve diğer diller gibi anahtar kelimeler var. Elbette bu dillerde biraz farklı. Common Lisp anahtar kelimeler ve Clojure anahtar kelimeler arasında bazı farklar:

  1. Clojure anahtar kelimeler Semboller değildir.

    user> (symbol? :foo)  
    false
    
  2. Anahtar kelimeler onları özel olarak nitelemek sürece herhangi bir ad değil:

    user> (namespace :foo)
    nil
    user> (namespace ::foo)
    "user"
    

(Teşekkürler bana bu konularda fikir vererek bakmak için 10**.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BenjiManTV

    BenjiManTV

    20 Mart 2011
  • picster

    picster

    20 NİSAN 2006
  • technodromeband's channel

    technodromeb

    28 NİSAN 2011