如何消除此Scala分配/测试/抛出序列中的val重复

时间:2013-03-11 22:54:09

标签: scala boilerplate

当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,这只是我最初的表述。

2 个答案:

答案 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 _ =>
}