Ответ 1
Вы можете определить активный шаблон:
let (|Int|_|) s =
match System.Int32.TryParse s with
| true, v -> Some v
| _ -> None
let getWoeid args =
match args with
| [|Int v|] -> Some v
| _ -> None
Здравствуйте, я написал следующий код.
Моя задача состояла в том, чтобы написать функцию getWoeid, которая проверит, является ли параметр командной строки массивом с 1 элементом, и этот элемент является целым числом.
Мой код работает... но я вызываю метод TryParse два раза... Интересно, есть ли способ, которым я могу назвать это только один раз.
Кроме того, вы можете подтвердить, правильно ли этот способ использования сопоставления шаблонов для проверки параметров командной строки?
open System;
open System.Xml;
let getWoeid args =
let retVal = 0
match args with
| [|a|] when fst (Int32.TryParse(a)) = true ->
printfn "%s" "Starting the processing for woeid "
Some(snd (Int32.TryParse(a)))
| _ -> failwith "Usage XmlRead WOEID"
[<EntryPoint>]
let main args =
let woeid=
try
getWoeid args
with
| Failure (msg) -> printfn "%s" msg; None
0
Вы можете определить активный шаблон:
let (|Int|_|) s =
match System.Int32.TryParse s with
| true, v -> Some v
| _ -> None
let getWoeid args =
match args with
| [|Int v|] -> Some v
| _ -> None
Вы также можете передать параметр byref в TryParse
вместо того, чтобы разрешать его заполнение.
let getWoeid args =
let mutable i = 0
match args with
| [|s|] when Int32.TryParse(s, &i) -> Some i
| _ -> None