scala - Extractor with pattern matching -
this scala code
object twice { def apply(x: int): int = x * 2 def unapply(z: int): option[int] = if (z%2 == 0) some(z/2) else none } object twicetest extends app { val x = twice(5) println(x) x match { case twice(n) => println(n) } } prints
10 5 when twicetest run. question is: x integer , not function twice(n), why pattern matching works?
it's because of pattern matching expression.
let's take @ it:
x match { case twice(n) => println(n) } you matching using twice. in background, call twice.unapply() parameter x. if result some(foo), substitute value of foo value of n. otherwise won't match.
see this longer explanation.
Comments
Post a Comment