我有一套:为了论证,我们称之为fruitBasket: Set[Fruit]
Fruit
枚举的值为Apple
,Pear
和Orange
我要填充fruitBasket
:
Apple
为真,则hasApple
Pear
如果布尔hasPear
为真,Orange
为真,则hasOrange
fruitBasket
将包含Apple
,Pear
和Orange
,例如
请问Scala在语法上最简洁的方法是什么?
真实用例是Play中用于处理复选框的表单映射。我不喜欢我目前的实施,感觉很笨拙:
var modes = Set[ExchangeMode]()
if (exchangeModeL) modes += LenderHosts
if (exchangeModeD) modes += DropOffToBorrower
if (exchangeModeP) modes += AtPublicPlace
modes
答案 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