2017-03-14 25 views
2

Eine Frage von einem ScalaZ Neophit hier. Ich verstehe nicht ganz, wie das:Verhalten in Scalaz nicht verstanden

1.some 

oder die Disjunktion bezogen werden:

"Success!".right 

Arbeit. Ich kann keine impliziten Conversions finden, die das obige Verhalten zulassen. Ich weiß, wie man sie benutzt, aber ich interessiere mich für ihre Implementierung. Danke.

Antwort

3

Die Klasse die Methode some ist OptionIdOps

final class OptionIdOps[A](self: A) { 
    def some: Option[A] = Some(self) 
} 

Wenn Sie in der Definition betrachten, sehen Sie eine zusätzliche implizite verfügbar für jede Art A zu OptionIdOps innerhalb eines Merkmals Definition enthält:

trait ToOptionIdOps { 
    implicit def ToOptionIdOps[A](a: A) = new OptionIdOps(a) 
} 

So de-facto, tut der Compiler:

val someOfInt = new OptionIdOps(1).some 
+1

danke Yuval, wie immer sind Ihre Antworten sehr informativ – Adrian