deftype
bireyin varsayılan alanları değişmez olmak için hala olduğu; Bunu geçersiz kılmak için uygun meta verilerle değiştirilebilecek alanların adlarına açıklama eklemeniz gerekir. Ayrıca, örnek alanların set!
sözdizimi farklıdır. Ayrıca :unsynchronized-mutable
var
(deftype Point [^{:volatile-mutable true} x]
IPoint
(getX [_] x)
(setX [this v] (set! x v)))
: Bir örnek uygulama yukarıda çalışması için. Fark, isimlerin deneyimli bir Java geliştiricisine önerdiği gibi. Doğrudan alan erişim artık mümkün böylece ;-), ek açıklama ya sağlayarak alan özel yapmanın ilave bir etkisi olmadığını unutmayın:
(.getX (Point. 10)) ; still works
(.x (Point. 10)) ; with annotations -- IllegalArgumentException, works without
Ayrıca, 1.2 olasılıkla (^{:volatile-mutable true} x
için kısaltma olarak bu sözdizimini ^:volatile-mutable x
destekleyecek bazı yeni sayısal dallarda zaten mevcuttur).
Her iki seçenek (doc deftype)
olarak söz edilir; ilgili bölüm aşağıdakileri izler; meta ile
Sahası nitelikli olabilir : yöntem organları desteklenecek olan alanına (mesafelere Aval set!) de, senkronize olmayan-kesilebilir doğru: Gerçek uçucu kesilebilir veya. Kesilebilir alanların doğru kullanımı son derece zordur ve Clojure kendisi, örneğin Clojure referans türleri gibi yüksek seviye yapıları, bina kolaylaştırmak üzere, sadece mevcut olduğu da not edin. Onlar sadece uzmanlar içindir - semantik ve etkileri ise: uçucu-değişken veya: unsynchronized-değişken size hemen belli değildir, sen bunları kullanarak edilmemelidir.
teşekkürler. Sen bunu söylemek burada :) –
Nice'i görmekten memnuniyet bilgi hazinesidir, teşekkürler konum. :-) –
Vurgulamak istiyorum ... tekrar ... "kullanmamanız gerekir". Kullanmayın: uçucu-mutable ve: senkronize olmayan-mutable. Zaten bilmiyorsanız, bu uyarı sizin için geçerli değildir ve neden uyarıyı tekrar belirttiğimi anlıyor ;-) – Jason