我试图在一个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"
的内容。
InvariantEqual
这个名称有误导性,因为您使用的是OrdinalIgnoreCase
而不是InvariantCultureIgnoreCase
。 - Maslow