我正在尝试解析 F# 应用程序中的命令行参数。我在参数列表上使用模式匹配来完成它。就像是:
let rec parseCmdLnArgs =
function
| [] -> { OutputFile = None ; OtherParam = None }
| "/out" :: fileName :: rest -> let parsedRest = parseCmdLnArgs rest
{ OutputFile = Some(fileName) with parsedRest }
问题是我想让"/out"
匹配大小写不敏感,同时保留其他内容的大小写。这意味着我无法更改输入并将输入的小写版本与之匹配(这将丢失fileName
大小写信息)。
我想了几个解决方案:
- 诉诸
when
不太理想的条款。 - 每次匹配一个元组,第一个将是实际参数(我将保存它以供进一步处理并将通配符匹配它),第二个将是此类匹配中使用的小写版本。这看起来比第一个更糟糕。
- 使用主动模式,但这看起来太冗长了。我将不得不重复
ToLower "/out"
每个项目之前的内容。
做这些事情有更好的选择/模式吗?我认为这是一个普遍的问题,应该有一个很好的方法来处理它。