我必须根据每个不同的条件建立一个列表,其成员应该包括或不包括在内。
假设我必须验证采购订单,并且根据价格,我必须通知一些人:如果价格超过 10,则必须通知主管。如果价格超过 100,那么主管和经理都是。如果价格超过 1000 则为主管、经理和主管。
我的函数应该将价格作为输入并输出要通知的人员列表。我想出了以下内容:
def whoToNotify(price:Int) = {
addIf(price>1000, "director",
addIf(price>100, "manager",
addIf(price>10, "supervisor", Nil)
)
)
}
def addIf[A](condition:Boolean, elem:A, list:List[A]) = {
if(condition) elem :: list else list
}
在普通的 Scala 中是否有更好的方法来做到这一点?我是在用我的addIf
功能重新发明一些轮子吗?
请注意,价格检查只是一种简化。在现实生活中,对许多数据库字段的检查会更加复杂,并且在组织层次结构中包括某人并不意味着包括下面的所有人,因此截断列表解决方案将不起作用。
编辑
基本上,我想使用不可变列表实现以下目标:
def whoToNotify(po:PurchaseOrder) = {
val people = scala.collection.mutable.Buffer[String]()
if(directorCondition(po)) people += "director"
if(managerCondition(po)) people += "manager"
if(supervisorCondition(po)) people += "supervisor"
people.toList
}