2012-02-22 39 views
6

Bunu uygulamak için iki farklı yol vardır.Kitaplığı zenginleştirmeyi en iyi yolu scala'da nedir?

biri İkinci ise

implicit def toR1(s:String) = new { def getLength = s.length)} 

daha kısadır daha uzun

class R2(s:String){def getLength2 = s.length)} 
implicit def toR2(s:String) = new R2(s) 

iyi biridir

?

+4

'örtülü sınıf R3 (s: String) {def GetLength = s.length}' :) Gerçekten dahil edilecektir umut Scala 2.10: http://docs.scala-lang.org/sips/pending/implicit-classes.html – tenshi

+2

olası bir kopya: [Kapalı yöntemler için ara türleri nasıl uygulanır?] (Http://stackoverflow.com/questions/5220359/nasıl uygulamaya geçirilen bir ara-tipi-kapalı-yöntemler/5.220.725). İkinci DR: Scala 2.10 da dahil olmak üzere –

+0

örtük sınıflar _are_ altında kaput altında yansıma kullandığı için ikinci, daha iyi bir performansa sahiptir, bu yüzden belki de şu anda bu sorunun sadece bir cevabı geçersizdir. – matanster

cevap

11

İlk sürümü structural type kullanır. Kısa ve okunabilir bir kod yazmayı mümkün kılar, ancak yapısal tiplerin bir dezavantajı, yapısal tipte yöntemi çağırdığınızda yansıtma işleminin çalışma zamanında kullanılmasıdır. Yansıma yoluyla bir yöntemi çağırmak, bir yöntemi doğrudan çağırmaktan daha yavaştır.

Daha fazla detay (bana göre yazılmış) Bu blog yayınında şunlardır: Avoid structural types when pimping libraries

+0

@Andy, bağlantıyı değiştirdi. – Jesper

İlgili konular