scala.runtime.RichString son olarak bildirildiğinden, class MyString extends RichString
gibi genişletemezsiniz. 'Kütüphaneyi pezevenk' yapmak ve sadece başka bir yöntem eklemek istiyorum. Bunu nasıl yapardım?Scala'nın RichString'ini genişletmenin bir yolu var mı?
cevap
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)
- 1. Tip bildirimlerini genişletmenin bir yolu var mı?
- 2. Köşeli yönlendirici: var olan bir durumu başka bir modülün yapılandırma bloğunda genişletmenin bir yolu var mı?
- 3. Bir Ruby Sınıfını genişletmenin doğru yolu?
- 4. JTree düğümünü genişletmenin veya test etmenin daha iyi bir yolu var mı?
- 5. Sırasız liste öğelerinin arka plan rengini mermilerin ardına gitmek için genişletmenin bir yolu var mı?
- 6. Pharo Smalltalk sınıf davranışını genişletmenin en iyi yolu?
- 7. CGPoints'i karşılaştırmanın bir yolu var mı?
- 8. RubyGems'i çevrimdışı güncellemenin bir yolu var mı?
- 9. Düzenleri canlandırmanın bir yolu var mı? [Android]?
- 10. Hafızayı sınırlamanın bir yolu var mı?
- 11. Pydev'de REPL almanın bir yolu var mı?
- 12. YQL'i HTML'ye döndürmenin bir yolu var mı?
- 13. Parametreyi çıkarmanın bir yolu var mı?
- 14. WiX yapılarını hızlandırmanın bir yolu var mı?
- 15. cuBLAS'da "saypx" yapmanın bir yolu var mı?
- 16. Files.write (...) yöntemini almanın bir yolu var mı?
- 17. "Vurgulu" kodun herhangi bir yolu var mı?
- 18. SKActions'i duraklatmanın bir yolu var mı?
- 19. Keyboard.FocusedElement öğesine bağlamanın bir yolu var mı?
- 20. django.db.connection.queries öğesini temizlemenin bir yolu var mı?
- 21. Özel SmartArt geliştirmenin bir yolu var mı?
- 22. ConfigurationManager.AppSettings'i geçersiz kılmanın bir yolu var mı?
- 23. C harflerini saymanın bir yolu var mı?
- 24. IComparer'dan IEqualityComparer türetmenin bir yolu var mı?
- 25. Python'da + = aşırı yüklenmenin bir yolu var mı?
- 26. Bunu F # yazmanın bir yolu var mı?
- 27. PDF'leri pdf.js'de birleştirmenin bir yolu var mı?
- 28. TensorFlow baskılarını bastırmanın bir yolu var mı?
- 29. Baharda JSON deserializer yazmanın ya da onu genişletmenin doğru yolu
- 30. Bildirimde bir arabelleği bir diziyle başlatmanın bir yolu var mı?
Müthiş:
Bunu yapmak için aşağıdakine benzer bir şey yapacağını. Teşekkürler. – pr1001
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