0

当 properties.keySet 包含 EXPECTED_IMPORT_KEYS 中不存在的键时,此代码将引发异常。val 在代码中被引用了 3 次,

val unexpectedKeys = properties.keySet -- EXPECTED_IMPORT_KEYS
if (unexpectedKeys.nonEmpty) {
   throw new UnexpectedKeysException(unexpectedKeys)
}

在 Scala 中是否有更优雅的方法来实现这一点?我特别想到了重复的 val 引用。这些重复可以消除吗?

知道代码完成后不需要 unexpectedKeys val 可能会有所帮助。

我正在寻找的改进是将 val 发生的次数从三减少。没有必要有一个 val,这只是我最初的表述。

4

2 回答 2

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)
于 2013-03-11T23:29:49.867 回答
3

你可以试试:

(properties.keySet -- EXPECTED_IMPORT_KEY) match {
  case residual if residual.nonEmpty => throw new UnexpectedKeysException(residual)
  case _ =>
}
于 2013-03-11T23:03:58.557 回答