scala - PartialFunction type -


in scala play framework seen code:

abstract class analyserinfo case class columnc(typename:string,fieldname:string) extends analyserinfo case class tablec(typename:string) extends analyserinfo      val asis :partialfunction[analyserinfo,string] = {       case columnc(_,f) => f;       case tablec(typename) => typename     } 

what difference with:

val asis: (analiserinfo)=>string = (info) => info match {   case columnc(_,f) => f;   case tablec(typename) => typename } 

there preferred style? , why in first case match keyword can omitted?

thank support.

double => double shorthand function[double, double]. partialfunction inherits function adds few methods. importantly, adds method isdefinedat allows query if function defined parameter.

the cases without match special syntax define partial functions, generates isdefinedat returns true matching cases.

say have function returns 1/x, positive values of x, define as:

scala> val f: (double => double) = { case x if x > 0 => 1/x }              f: (double) => double = <function1> 

or as:

scala> val g: partialfunction[double, double] = { case x if x > 0 => 1/x } g: partialfunction[double,double] = <function1> 

the second version has benefit check if function applicable parameter:

scala> g.isdefinedat(-3) res0: boolean = false 

this feature example used in scala implement actor library actor might consume types of messages.


Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -