基于布尔值填充枚举的枚举

时间:2013-05-22 10:01:57

标签: scala playframework-2.0

我有一套:为了论证,我们称之为fruitBasket: Set[Fruit]

Fruit枚举的值为ApplePearOrange

我要填充fruitBasket

    如果布尔Apple为真,则
  • hasApple
  • Pear如果布尔hasPear为真,
  • 如果布尔Orange为真,则
  • hasOrange
如果所有三个布尔值均为真,则

fruitBasket将包含ApplePearOrange,例如

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

真实用例是Play中用于处理复选框的表单映射。我不喜欢我目前的实施,感觉很笨拙:

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

2 个答案:

答案 0 :(得分:3)

这个怎么样:

val modes = Map(
  LenderHosts       -> exchangeModeL, 
  DropOffToBorrower -> exchangeModeD, 
  AtPublicPlace     -> exchangeModeP
) filter (_._2) keySet

答案 1 :(得分:3)

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

for {
  (b, v) <- Set(hasApple->Apple, hasPear->Pear, hasOrange->Orange) if b
} yield v