2

我有一个集合:为了论证,我们称它为fruitBasket: Set[Fruit]

枚举的Fruit值如Apple,PearOrange

我要填充fruitBasket

  • Apple如果布尔hasApple值为真
  • Pear如果布尔hasPear值为真,
  • Orange如果布尔hasOrange值为真

fruitBasket将包含Apple,如果所有三个布尔值都为真PearOrange例如

请问在 Scala 中最简洁的语法方式是什么?

现实生活中的用例是 Play 中处理复选框的表单映射。我不喜欢我当前的实现,感觉很笨拙:

var modes = Set[ExchangeMode]()
if (exchangeModeL) modes += LenderHosts
if (exchangeModeD) modes += DropOffToBorrower
if (exchangeModeP) modes += AtPublicPlace
modes
4

2 回答 2

3

如果您更喜欢理解和模式匹配元组:

for {
  (b, v) <- Set(hasApple->Apple, hasPear->Pear, hasOrange->Orange) if b
} yield v
于 2013-05-22T10:37:34.980 回答
3

这个怎么样:

val modes = Map(
  LenderHosts       -> exchangeModeL, 
  DropOffToBorrower -> exchangeModeD, 
  AtPublicPlace     -> exchangeModeP
) filter (_._2) keySet
于 2013-05-22T10:25:22.177 回答