2010-06-20 41 views

cevap

15

implicits önemli bir kural sadece kimse izin vermeyeceği String eklediği yöntemlerin tamamlayıcı için sırayla eklemek amacıyla RichString pimping, belirli bir (alt) ifadesi tip onay yapmak uygulandığı anlamına olduğundan RicherString (eğer yapacaksınız) yöntemlerini, doğrudan String örneklerinde kullanılabilirmiş gibi görebileceksiniz. Tabii ki, RichString, ve RichString örnekleri basit tipte ascription ile String örneklerinden kullanılabilir. Ama yine de, herkesin uygun bulduğu bir şey değil.

Bu yüzden pratik amaçlar için, Scala'da gerçekten neyi istemek mümkün değil.

Diğer yandan, numaralı alternatifini String eklemeye ihtiyacınız varsa, yalnızca kendi genişletilmiş dize sınıfınızı tanımlayabilirsiniz. Tanımladığı ve RichString'de tanımlanan yöntemler arasında çakışma yoksa, derleyicinin hangisinin uygulanacağına karar vermede çözmesi için hiçbir belirsizlik olmayacaktır. Muhtemelen yeterince iyi, değil mi? Ayrıca, bu yaklaşım (alternatif, çakışmayan bir örtülü dönüştürme), numaralı RichString yerine sahip olan Scala 2.8'e geçtiğinizde kırılmayacaktır. Tam olarak ne istediğimi yapar,

class MyRichString(underlying:String){ 
    def myNewMethod = { ... } 
} 

implicit def addMyMethods(s:String)=new MyRichString(s) 
+0

Müthiş:

Bunu yapmak için aşağıdakine benzer bir şey yapacağını. Teşekkürler. – pr1001

+0

Aslında, bu örüntü o kadar yaygındır ki [örtük sınıflar] (http://docs.scala-lang.org/overviews/core/implicit-classes.html) resmi olarak dahil edilmiştir. – jeslg

İlgili konular