scala - More concise way to class match and access last of Option[List] -


i have function parameter takes object , if of correct type need access last element in option[list[int]]. have working solution seems clumsy. in case there not items in obj.listofthings need have i have value 0. there better way achieve this?

val = foo match {   case obj: bar =>     obj.listofints match {       case some(ints) =>         ints.last       case _ =>         0     }   case _ =>     0 } 

technically return option[int]. i'm still pretty new scala , learn better approaches sort of problems.

in case seems ende neu suggested right way go:

val = foo match {   case obj: bar =>      obj.listofints.map(_.last /* throws exception when list empty*/).getorelse(0)   case _ =>     0 } 

but if you'll see have bug in code, in case that obj.listofints some(nil), because in case nosuchelementexception trying call last on empty list.

try code foo = bar(some(nil)) , see yourself.

when use option[list] think if want. after thinking scrap option , stay list because option serves no purpose. worked many developers misuse option[list] because of not understanding similarities between nil , none , 'none' case ends playing same role some(nil)

so end having this:

optionallist match {     case none => //     case some(list) =>         list match {             case nil => // same thing             case head::tail => // other stuff         } } 

as can see none case , some(nil) case same.

to fix bug should do:

  case class bar(listofints: option[list[int]])    val = foo match {     case bar(some(list)) if list != nil => list.last     case _ => 0   } 

Comments

Popular posts from this blog

c - Bitwise operation with (signed) enum value -

xslt - Unnest parent nodes by child node -

YouTubePlayerFragment cannot be cast to android.support.v4.app.Fragment -