SORU
22 AĞUSTOS 2011, PAZARTESİ


Neden Clojure sadece bir yerine bir sınıf tanımlamak için 5 yolu var mı?

Clojure gen-sınıf, reify, proxy ve ayrıca deftype ve defrecord sınıf gibi yeni veri türlerini tanımlamak için. Sözdizimsel basitlik değerleri ve gereksiz karmaşıklığı iğrendiği bir dil için, bir istisna gibi görünüyor. Biri bunu açıklayabilir mi? Lisp tarzı defclass Ortak yeterli olabilir mi?

CEVAP
22 AĞUSTOS 2011, PAZARTESİ


Bu üç farklı faktörlerin bir karışımı

  1. Özellikle yazın jvm sistem
  2. Türleri tanımlarken farklı kullanım durumları için biraz farklı semantiği gerek
  3. Bunlardan bazıları dili gelişmiştir gibi daha önce, ve biraz daha gelişmiş olması.

Bu yüzden ilk olarak, bu ne göz önünde bulundurun.deftypevegen-sınıfıonlar zamanından önce derleme. adında bir sınıf tanımlar hem de bu benzer Gen-birinci sınıf, clojure 1.2 deftype izledi. Deftype tercih edilir ve daha iyi performans özelliklere sahiptir, ama daha kısıtlayıcıdır. Deftype bir sınıf bir arabirim için uygun olabilir, ancak başka bir sınıftan miras alır.

Reifyveproxyher ikisi için kullanılır dinamik olarak çalışma zamanında bir anonim sınıfının bir örneğini oluşturun. Proxy birinci geldi, reify deftype ile birlikte geldi ve clojure 1.2 defrecord. Reify deftype semantiği çok kısıtlayıcı değil, sadece olarak tercih edilmektedir.

Aynı zamanda ortaya çıktı, ve benzer bir role sahip olduğundan, her iki deftype ve defrecord neden soru bırakır. Bildiğimiz çeşitli clojure iyilik ve sevgi, sequability hepsi var ve benzeri. defrecord kullanmak isteyeceksiniz birçok amaç için: Deftype diğer datastructures uygulanması için düşük seviyeli bir yapı taşı olarak kullanılmak üzere tasarlanmıştır. Düzenli clojure arabirimleri içermez, ama değişken alanların bu seçenek öntanımlı değildir olsa) var.

Daha fazla okuma kontrol için:

The clojure.org datatypes page

The google group thread where deftype and reify were introduced

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AginoEvolutionHD

    AginoEvoluti

    27 AĞUSTOS 2011
  • graham025

    graham025

    25 NİSAN 2006
  • TantalizingTrance

    TantalizingT

    15 ŞUBAT 2009