2015-08-29 19 views
6

Per conversione implicita a Scala, posso utilizzare uno funzione di conversione implicitaDifferenza tra conversione con funzione implicita e la classe implicita in Scala

implicit def intToX(i:Int):X = new X(i) 

1.myMethod // -1 

o classe implicita

implicit class X(i: Int) { 
    def myMethod = - i 
} 

1.myMethod // -1 

non v'è alcuna differenza tra il Due? Quando dovrei preferire uno rispetto all'altro?

C'è una domanda correlate su implicit conversion vs. type class ma si confronta solo funzioni implicite e classi di tipo. Quello che mi interessa è la differenza dalle classi implicite .

risposta

14

classe implicito è uno zucchero sintassi per metodo implicito e una classe:

http://docs.scala-lang.org/sips/completed/implicit-classes.html:

Ad esempio, una definizione della forma:

implicit class RichInt(n: Int) extends Ordered[Int] { 
    def min(m: Int): Int = if (n <= m) n else m 
    ... 
} 

sarà essere trasformato dal compilatore come segue:

class RichInt(n: Int) extends Ordered[Int] { 
    def min(m: Int): Int = if (n <= m) n else m 
    ... 
} 

implicit final def RichInt(n: Int): RichInt = new RichInt(n) 

classi implicite stati aggiunti in scala 2.10 perché era molto comune per definire nuova classe di definire metodo implicito conversione ad esso.

Ma se non c'è bisogno di definire una nuova classe ma la definizione di conversione implicita di classe esistente si dovrebbe meglio utilizzare un metodo implicito

+0

Grazie, questo è esattamente quello che volevo sapere! – Mifeet

Problemi correlati