当properties.keySet包含EXPECTED_IMPORT_KEYS中不存在的键时,此代码会引发异常。 val在代码中引用了三次,
val unexpectedKeys = properties.keySet -- EXPECTED_IMPORT_KEYS
if (unexpectedKeys.nonEmpty) {
throw new UnexpectedKeysException(unexpectedKeys)
}
在Scala中有没有更优雅的方法来实现这一目标?我特别想到重复的val引用。这些重复可以消除吗?
可能有助于知道代码完成后不需要unexpectedKeys val。
我正在寻找的改进是val发生次数减少了三次。没有必要有val,这只是我最初的表述。
答案 0 :(得分:4)
如果您经常需要这个,只需定义一个小帮助方法:
def emptyOption[A, CC <: Iterable[A]](coll: B with collection.IterableLike[A, CC]) =
if (coll.isEmpty) None else Some(coll)
然后像这样使用它:
scala> emptyOption(Set[Int]()) foreach (coll => throw new RuntimeException(coll.toString))
scala> emptyOption(Set[Int](1)) foreach (coll => throw new RuntimeException(coll.toString))
java.lang.RuntimeException: Set(1)
答案 1 :(得分:3)
你可以尝试:
(properties.keySet -- EXPECTED_IMPORT_KEY) match {
case residual if residual.nonEmpty => throw new UnexpectedKeysException(residual)
case _ =>
}