loop / recurse直到输入有效

时间:2015-05-27 16:17:20

标签: loops recursion f#

我正在尝试制作一些代码,以便在输入有效的文件路径或“退出”之前不断询问用户。

我现在拥有的:

let (|ValidPath|_|) str =
    if File.Exists str then Some ValidPath
    else None

type Return =
    |Path of string
    |Exit

let rec ask =
    printfn "%s" "Please enter a valid path or \"exit\""
    let input = Console.ReadLine()
    match input with
    | "exit" -> Exit
    | ValidPath -> Path input
    | _ -> ask

ask函数有The value 'aks' will be evaluated as part of its own definition错误。

我该怎么办?

1 个答案:

答案 0 :(得分:4)

问题是ask不是一个函数,它是一个递归值。您需要获取一个参数才能使其成为一个函数:

let rec ask () =
    printfn "%s" "Please enter a valid path or \"exit\""
    let input = Console.ReadLine()
    match input with
    | "exit" -> Exit
    | ValidPath -> Path input
    | _ -> ask ()