2

私はセットを持っています: 議論のために、それを呼びましょうfruitBasket: Set[Fruit]

Fruit列挙型にはApple、のような値がPearあります。Orange

私は移入fruitBasketしたい:

  • Appleブール値hasAppleが true の場合
  • Pearブール値hasPearが true の場合、
  • Orangeブール値hasOrangeが true の場合

fruitBasketを含みApple、 3 つのブール値がすべて truePearOrange場合、たとえば

Scala でこれを行う最も構文的にきれいな方法を教えてください。

実際の使用例は、チェックボックスを処理する Play のフォーム マッピングです。私は、不器用に感じる私の現在の実装のファンではありません:

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

2 に答える 2

3

これはどう:

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

内包表記とパターン マッチングのタプルが必要な場合:

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