2011-07-09 23 views
19

Değişmez nesneler tasarlarken, otomatik oluşturulan copy yöntemi nedeniyle vaka sınıfları son derece kullanışlıdır.'kopya'?

Fakat vaka sınıflarının kendi problemleri vardır: bunlar, sizden miras alınmamalı ve siz istemeseniz bile size bir çıkarıcı vermelidir.

Bazen bir bahçe çeşidi olan Scala sınıfını kullanmam gerekiyor.

class Debt(principalBalance: Double, name: String, endDate: LocalDate) { 
    def withNewPrincipalBalance(bal: Double) = new Debt(bal, name, endDate) 
} 

bunu yapmanın bir daha ölçeklenebilir bir yolu var mı: Sorun o zaman ben kendi değişmez API oldukça tekrarlayan olabilir yazmak zorunda olmasıdır? Kullanabileceğim bir derleyici eklentisi var mı?

+2

http://stackoverflow.com/q/3900307/203968 adresine bakın. – oluies

cevap

31

Derleyici eklentisi hakkında bir bilgim yok, ancak varsayılan argümanlarla birlikte adlandırılmış argümanları kullanan örnek sınıflarında oluşturulan gibi bir copy yöntemini tanımlayabilirsiniz.

class Debt(principalBalance: Double, name: String, endDate: LocalDate) { 
    def copy(principalBalance: Double = principalBalance, 
      name: String = name, 
      endDate: LocalDate = endDate) = new Debt(principalBalance, name, endDate) 
} 

Bu, her bir özellik (withNewPrincipalBalance) için farklı yöntem kadar tekrarlanan değildir ve bu mümkün (örneğin oluşturma tarihi) belirli değerlerin değişikliklere izin kolaylaştırır.