F# アプリケーションでコマンド ライン引数を解析しようとしています。私はそれを達成するために、パラメーター リストに対してパターン マッチングを使用しています。何かのようなもの:
let rec parseCmdLnArgs =
function
| [] -> { OutputFile = None ; OtherParam = None }
| "/out" :: fileName :: rest -> let parsedRest = parseCmdLnArgs rest
{ OutputFile = Some(fileName) with parsedRest }
"/out"
問題は、他のものの大文字と小文字を保持しながら、大文字と小文字を区別しないようにしたいことです。つまり、入力を変更して、入力の小文字バージョンを照合することはできません (大文字と小文字のfileName
情報が失われます)。
私はいくつかの解決策について考えました:
- 理想
when
的とは言えない条項に頼る。 - 毎回タプルを照合します。最初は実際のパラメータ (さらに処理するために保存し、ワイルドカードで照合します) で、2 番目はそのような照合で使用される小文字のバージョンです。これは最初より悪く見えます。
- アクティブなパターンを使用しますが、冗長に見えます。
ToLower "/out"
すべてのアイテムの前のように繰り返す必要があります。
この種のことを行うためのより良いオプション/パターンはありますか? これは一般的な問題であり、それを処理する良い方法があるはずだと思います。