2014-04-15 16 views
8

Ben öznel bir soru olarak bu anlamına gelmez - Tam with-meta dilde anlamaya çalışıyorum. Ben (şimdiye eval can, ancak belirli koşullar dışında kullanımı Kötü Tasarım işaretidir) o birçok amaç için kullanılabilir farkındayız. Tasarım açısından bakıldığında, Clojure meta yapısı nedir benzersiz amaca hizmet ediyor? Öncelikle belgeler için mi? Şeker miClojure En İyi Uygulama: Meta Veri Ne Zaman Kullanılır?

with-meta/meta için bazı güçlü uygulamalar nelerdir? Hangi durumlarda kötü bir fikir? Onsuz imkansız/zor/sıkıcı olabilecek bir şey yapmak için meta veri kullanımına dair bir örnek verebilir misiniz? Dilin temel özellikleri birkaç

cevap

5

meta verilerine bağlıdır:

  • makro meta veri bağlıdır bir özellik. Makro, işlevlerin tamamında çalışmasına neden olan meta verilerden oluşan bir işlevdir.

    user> (meta #'when) 
    
    {:macro true, 
    :ns #<Namespace clojure.core>, 
    :name when, :arglists ([test & body]), 
    :column 1, :added "1.0", 
    :doc "Evaluates test. If logical true, evaluates body in an implicit do.", 
    :line 471, 
    :file "clojure/core.clj"} 
    
  • Türleri meta veri bağlıdır dilin başka özelliğidir. Bir şeyin türü, o nesne üzerinde meta veri olarak ifade edilir.

  • testler de meta kullanırlar. run-tests numaralı telefonu aradığınızda (ya da işaretlediğinizde), test edilenleri bulmak için her ad alanındaki işlevlerin meta verilerine bakar.

, bu kullanım meta çalışırken ekranın alt kısmında fonksiyon argümanları görüntülendiği n-repl/şarabı gibi periferik şeyler türleri gibi dilin çekirdek arasında değişen birçok durumlar vardır.

+0

Herkes bir kurşun listesinde kodu yapmak uygun kod bloğu gösterilmesini nasıl); tabii çirkin şeyler yapmak kullanmadığınızda sağlanan meta verileri kullanmanın bir tasarım koku değil mi? –

+0

4 boşluk daha girintili ve mermi noktası ile kodun arasına boş bir satır koymalısınız. – danneu

+2

@ArthurUlfeldt'e saygıyla, bu cevap et eksik! Bana bu çirkin şeylerden bahset? –

İlgili konular