Tôi đang cố phân tích đối số dòng lệnh trong ứng dụng F #. Tôi đang sử dụng mô hình phù hợp với các danh sách tham số để thực hiện nó. Một cái gì đó như:Khớp mẫu không phân biệt chữ hoa chữ thường trên các danh sách chuỗi
let rec parseCmdLnArgs =
function
| [] -> { OutputFile = None ; OtherParam = None }
| "/out" :: fileName :: rest -> let parsedRest = parseCmdLnArgs rest
{ OutputFile = Some(fileName) with parsedRest }
Vấn đề là tôi muốn làm "/out"
không phân biệt chữ hoa chữ thường trong khi vẫn giữ nguyên các thứ khác. Điều đó có nghĩa là tôi không thể thay đổi đầu vào và khớp với phiên bản chữ thường của đầu vào vào nó (điều này sẽ mất thông tin trường hợp fileName
).
Tôi đã nghĩ về một số giải pháp:
- Resort tới
when
khoản đó là ít hơn lý tưởng. - Khớp một tuple mỗi lần, tham số đầu tiên sẽ là tham số thực (mà tôi sẽ lưu để xử lý tiếp và ký tự đại diện khớp với nó) và thứ hai sẽ là phiên bản được sử dụng trong các kết quả phù hợp. Điều này có vẻ tồi tệ hơn lần đầu tiên.
- Sử dụng các mẫu hoạt động nhưng có vẻ quá chi tiết. Tôi sẽ phải lặp lại những thứ như
ToLower "/out"
trước mỗi mục.
Có tùy chọn/mẫu tốt hơn để thực hiện các loại nội dung này không? Tôi nghĩ rằng đây là một vấn đề phổ biến và phải có một cách tốt để xử lý nó.
Tôi tìm thấy tên 'InvariantEqual' là gây hiểu nhầm vì bạn đang sử dụng' OrdinalIgnoreCase' không phải 'InvariantCultureIgnoreCase' – Maslow