Estoy tratando de analizar argumentos de línea de comandos en una aplicación F #. Estoy usando la coincidencia de patrones en la lista de parámetros para lograrlo. Algo así como:Coincidencia de patrón insensible a mayúsculas y minúsculas en listas de cadenas
let rec parseCmdLnArgs =
function
| [] -> { OutputFile = None ; OtherParam = None }
| "/out" :: fileName :: rest -> let parsedRest = parseCmdLnArgs rest
{ OutputFile = Some(fileName) with parsedRest }
El problema es que quiero hacer caso "/out"
partido insensibles preservando al mismo tiempo el caso de otras cosas. Eso significa que no puedo alterar la entrada y hacer coincidir la versión en minúscula de la entrada en su contra (esto perderá la información del caso fileName
).
he pensado en varias soluciones:
- Resort a
when
cláusulas que es menos que ideal. - Haga coincidir una tupla cada vez, la primera sería el parámetro real (que guardaré para su posterior procesamiento y la coincidencia con el comodín) y la segunda sería la versión en minúscula utilizada en dichas coincidencias. Esto se ve peor que el primero.
- Usa patrones activos pero parece demasiado detallado. Tendré que repetir cosas como
ToLower "/out"
antes de cada artículo.
¿Hay una mejor opción/patrón para hacer este tipo de cosas? Creo que este es un problema común y que debería haber una buena forma de manejarlo.
Me parece que el nombre 'InvariantEqual' es engañoso ya que está utilizando' OrdinalIgnoreCase' no 'InvariantCultureIgnoreCase' – Maslow