Validation F#强制用户输入整数
假设我要用以下内容读入用户的输入:Validation F#强制用户输入整数,validation,input,f#,Validation,Input,F#,假设我要用以下内容读入用户的输入: let input = Console.ReadLine() 如何验证用户的输入,使其必须为整数,否则将显示错误消息?请稍微展开@s952163的注释 您可以采用以下典型方式进行验证: let parse (s: string) = match (System.Int32.TryParse(s)) with | (true, value) -> value | (false, _) -> failwith "Invalid
let input = Console.ReadLine()
如何验证用户的输入,使其必须为整数,否则将显示错误消息?请稍微展开@s952163的注释 您可以采用以下典型方式进行验证:
let parse (s: string) =
match (System.Int32.TryParse(s)) with
| (true, value) -> value
| (false, _) -> failwith "Invalid int"
请注意,此函数的返回类型为int,隐式返回类型为exception
解析整数的更惯用方法是纯函数:
let parse (s: string) =
match (System.Int32.TryParse(s)) with
| (true, value) -> Ok value
| (false, _) -> Error "Invalid int"
此函数具有返回类型的结果,这意味着所有输入都映射到显式输出
然后,当输入可以使用结果模块中的组合符(如map和bind)进行解析时,更大的程序可以由只使用案例的函数组成
我更喜欢使用活动模式来处理F#中的解析。您可以为要分析的每种类型创建活动模式,例如:
let (|Int32|_|) (str: string) =
match Int32.TryParse(str) with
| (true, value) -> Some value
| _ -> None
您可以为Int64、Bool、DateTime等创建一个类似的活动模式。然后,您可以这样使用它们:
match Console.ReadLine() with
| Int32 i -> printfn "Integer: %d" i
| invalid -> printfn "Error: %s is not an Integer" invalid
您可以使用
Int32.TryParse
对输入进行模式匹配。