Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reading multiple variables from an object wrapped in Option[]

I have a variable obj: Option[MyObject] and want to extract multiple variables from it - if the object is not set, default values should be used.

Currently I do it like this:

val var1 = obj match {
    case Some(o) => e.var1
    case _ => "default1"
}
val var2 = obj match {
    case Some(o) => e.var2
    case _ => "default2"
}
...

which is extremely verbose. I know I could do it like this:

val var1 = if (obj.isDefined) obj.get.var1 else "default1"
val var2 = if (obj.isDefined) obj.get.var2 else "default2"

which still seems strange. I know I could use one big match and return a value object or tuple.

But what I would love is something similar to this:

val var1 = obj ? _.var1 : "default1"
val var2 = obj ? _.var2 : "default2"

Is this possible somehow?

like image 550
stephanos Avatar asked Dec 17 '22 10:12

stephanos


1 Answers

How about this?

obj.map(_.var1).getOrElse("default1")

or, if you prefer this style:

obj map (_ var1) getOrElse "default"
like image 63
Jean-Philippe Pellet Avatar answered Feb 08 '23 23:02

Jean-Philippe Pellet