2012-02-22 5 views
6

Sono due modi diversi per implementarlo.Qual è il modo migliore per usare arricch-my-library in scala?

uno è più corto

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

seconda è più lunga

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

che uno è meglio?

+4

classe 'implicita R3 (s: String) {def getLength = s.length}' :) Spero davvero che sarà incluso in Scala 2.10: http://docs.scala-lang.org/sips/pending/implicit-classes.html – tenshi

+2

un possibile duplicato: [Come implementare i tipi intermedi per i metodi impliciti?] (Http://stackoverflow.com/questions/5220359/come da implementare-intermedi-types-per-impliciti-metodi/5220725). TL; DR il secondo è migliore per quanto riguarda le prestazioni visto che il primo modo usa la riflessione sotto il cofano –

+0

classi implicite _ sono incluse in Scala 2.10, quindi forse la sola risposta a questa domanda è attualmente obsoleta. – matanster

risposta

11

La prima versione utilizza uno structural type. Rende possibile scrivere codice breve e leggibile, ma uno svantaggio di tipi strutturali è che la riflessione viene utilizzata in fase di esecuzione quando si chiama il metodo nel tipo strutturale. Chiamare un metodo tramite la riflessione è più lento che chiamare direttamente un metodo.

Maggiori dettagli sono in questo post del blog (scritto da me): Avoid structural types when pimping libraries

+0

@Andy grazie, ha sostituito il collegamento. – Jesper