从包装在 Option[] 中的对象读取多个变量 [英] Reading multiple variables from an object wrapped in Option[]

查看:41
本文介绍了从包装在 Option[] 中的对象读取多个变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个变量 obj: Option[MyObject] 并想从中提取多个变量 - 如果未设置对象,则应使用默认值.

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.

目前我是这样做的:

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"

这可能以某种方式吗?

推荐答案

这个怎么样?

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

或者,如果您更喜欢这种风格:

or, if you prefer this style:

obj map (_ var1) getOrElse "default"

这篇关于从包装在 Option[] 中的对象读取多个变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆