我有一个Properties
对象,如果配置包含特定键,则想要执行某些操作。如果此密钥不存在,我只想忽略它。我尝试了以下方式:
myProps getProperty "foo" match {
case v if v != null => doSomethingWith v
}
但如果属性对象不包含MatchError
,则会导致foo
。
我可以想出两种方法来解决这个问题。方法1是:
myProps getProperty "foo" match {
case v if v != null => doSomethingWith v
case _ => // ignore if foo does not exist
}
方法2是:
if(myProps containsKey "foo") doSomethingWith(myProps getProperty "foo")
就个人而言,我更喜欢方法1,因为它只查询Properties
一次,而评论告诉我们故意忽略不匹配,但这也很冗长。方法2有一个缺点,除了查询Properties
两次之外,如果在不久的将来密钥被更改,它必须在这里的两个地方进行更改,这是错误的来源。
那么,有没有更好的方法像方法1那样做,但更短,或者是这样做的?
答案 0 :(得分:3)
尝试在 x.remove(y);
x.add(z);
x.repaint();
x.revalidate();
中包装您的函数。
Option
Option(myProps getProperty "foo").map {
v => doSomethingWith v
}
将返回Option(myProps getProperty "foo")
或Some(propertyValue)
。仅当结果为None
时,才会执行代码中的Some(propertyValue)
。如果是None,则会被忽略。
使用doSomethingWith (v)
上的getOrElse
功能,如果结果为无,您也可以使用默认值。
正如@VladimirMatveev的评论中提到的,如果方法Option
有副作用,map
不是正确的做法。请改用doSomethingWith
。