从 Option[] 包装的对象中读取多个变量
我有一个变量 obj: Option[MyObject] 并希望从中提取多个变量 - 如果未设置该对象,则应使用默认值。
目前我是这样做的:
val var1 = obj match {
case Some(o) => e.var1
case _ => "default1"
}
val var2 = obj match {
case Some(o) => e.var2
case _ => "default2"
}
...
这是非常冗长的。我知道我可以这样做:
val var1 = if (obj.isDefined) obj.get.var1 else "default1"
val var2 = if (obj.isDefined) obj.get.var2 else "default2"
这仍然看起来很奇怪。我知道我可以使用一个大匹配并返回一个值对象或元组。
但我想要的是与此类似的东西:
val var1 = obj ? _.var1 : "default1"
val var2 = obj ? _.var2 : "default2"
这可能以某种方式吗?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这个怎么样?
或者,如果您喜欢这种风格:
How about this?
or, if you prefer this style:
另一种变体是使用 空对象模式 的版本并直接使用该对象
Another variation would be to use a version of the Null Object Pattern and use the object directly
要从选项中提取多个值,我建议返回一个元组并使用提取器语法:
To extract multiple values from an Option I'd recommend returning a tuple and using the extractor syntax: