你可以从
Argu
处理命令行参数并执行如下操作:
type OfferingFlags =
| Waved
| RequiresSalt
| OfferedWithFrankincense
| ShouldBeBroughtToCorner
| EntirelyBurnt
然后
MealOffering
类型可能如下所示:
type MealOffering =
{
Offering: Offering
Flour: AccompanyingMealOfferings
Flags: OfferingFlags list
}
旗
不
出现在列表中表示
false
值,列表中的标志表示
true
该标志的值。也就是说,要检查一个产品是否需要盐,您需要:
offering.Flags |> List.contains RequiresSalt
同献的素祭清单(需要盐,完全烧掉了,但确实烧掉了)
不
需要挥挥手,带到角落,或提供乳香),看起来像:
[ RequiresSalt; EntirelyBurnt ]
这种建模方法的优点是,无论有多少个标志,都可以添加一个新标志,而不必编辑
美食家
类型。这也可能是一个缺点,因为当您将每个标志单独建模为
bool
,任何时候添加一个新标志,编译器都会强制您在任何地方考虑它——而通过将其建模为一个du值列表,编译器不会强制您检查新标志
RequiresSomethingElse
在需要进行标记的地方标记。但是如果您认为已经添加了新标志,或者您添加的任何新标志也应该默认为
假
在大多数地方,然后
OfferingFlags list
方法通常是一个好方法。