functional programming - Implicit class in Scala -


i have following piece of code.i have confirm whether way how works..can provide explanation this

object implicits {   implicit class richseq[a](val xs:seq[a])   {     def mapd[b](function:a => b):seq[b] = xs.map(function)   } } 

this abstraction on map can use sequence. if import implicits.richseq can use methods on seq[a] convert seq[a] richseq[a].

import implicits.richseq._ val xs:seq[int] = seq(22,33) val output:seq[int] = xs.mapd(_+22) 

i want know how works because when use mapd on type seq[a] search implicit conversion seq[a] richseq[a].where find implicit conversion implicit class?

does expand implicit class like:

implicit def richseq[a](val xs:seq[a]) = new richseq(xs)

i think might doing stuff inside.does ne1 know this?

an implicit class shorthand for

class foo(a: a) implicit def pimpmya(a: a) = new foo(a) 

you can annotate class implicit if constructor takes 1 non-implicit parameter.

here's relevant doc can read more it: http://docs.scala-lang.org/overviews/core/implicit-classes.html


in specific example, means seq[a] can implicitly lifted richseq[a].

the compiler find implicit because imported it, it's available in scope.

you can see actual java output of code

val x = seq(1, 2, 3) x.mapd(_ + 22) 

by using scala repl option -xprint:typer. here's relevant bit of output

$line3.$read.$iw.$iw.implicits.richseq[int]($line3.$read.$iw.$iw.x).mapd[int](((x$1: int) => x$1.+(22))); 

which after polishing equivalent to

implicits.richseq(x).mapd(x$1 => x$1 + 22) 

as side note, have import implicits._. exact implicit resolutions rules, can refer where scala implicits?


Comments

Popular posts from this blog

java - Oracle EBS .ClassNotFoundException: oracle.apps.fnd.formsClient.FormsLauncher.class ERROR -

c# - how to use buttonedit in devexpress gridcontrol -

nvd3.js - angularjs-nvd3-directives setting color in legend as well as in chart elements -