, ..
biraz düştü, bir lehine, daha çok yönlü ->
ile değiştirilir.
(-> (NutritionFacts$Builder. 240 8)
(.calories 100)
(.sodium 350)
(.carbohydrates 27)
(.build))
Bir çift daha fazla karakter var, ama iki şey kazanmak: Şahsen ben tercih
- belirginliği.
.
tam orada olduğu için, sodyum hattına bakabilirim (örneğin) ve bunun bir Java yöntem çağrısı olduğunu söyleyebilirim.
- Esneklik. İhtiyacım olursa, ortadaki metot dışı çağrıları (stdout'a yazdırarak söyler) zincirleyebilirim ya da tüm bu mesajların sonunda başka bir işlev çağrısında bulunabilirim.
, bu soruya her cevap sınıfadı yanlış almış En önemlisi: Java'nın NutritionFacts.Builder NutritionFacts $ Oluşturucu adında gerçek JVM sınıfı üzerindeki dil şeker, ve bu sınıf bir Clojure beri (başvurması gerekir ise kodumuzu derlemek için javac kullanmıyoruz).
Ben doto
öneri katılmıyorusunuz: Bu Oluşturucu sınıf tek bir örneğini mutasyona ve sonra iade ederek onun yöntemi-zincirleme uygulamak olur çünkü sadece çalışır. doto
, yerinde mutasyon gerektiren Java nesneleri için mükemmeldir, ancak bir sınıf, değiştirilemez gibi davranmak için yeterince nazik olduğunda gerçekten yöntem zincirleme sürümünü kullanmanız gerekir (yani, ->
).
tek sebebi. Sadece bir [doto] (https://github.com/clojure/clojure/blob/f5f827ac9fbb87e770d25007472504403ed3d7a6/src/clj/clojure/core adresine yerleştirin.clj # L3395) ve bu iyi! –
@Goran Jovic Kodu önerdiğiniz gibi değiştirdim. Teşekkürler! –
Yup, işte bu kadar. 'Doto' ile' ..' arasındaki ana farkın, doto'nun ilk biçim tarafından tanımlanan bir nesnede yöntemleri çağırması olduğunu ve '..' her birinin bir öncekinin sonucuna göre yapıldığını unutmayın. Bu durumda, Java yöntemleri oluşturulmakta olan nesneyi döndürmeye devam ettiğinden aynıdır. –