如何在visual studio中使用f#interactive读取用户输入?

Toa*_*ums 4 f# input visual-studio

所以我想做一些简单的事情:

 printfn "Enter a number:"
    try
       let x = System.Console.ReadLine();
       Some(int32(x))
    with
       | :? System.FormatException -> printfn "Invalid number!"
                                      Some(0)
Run Code Online (Sandbox Code Playgroud)

我想打印消息,然后让用户输入一个数字,并尝试将其转换为int并返回它.

如果我只是编译代码(通过在命令行上键入fsc a3.fs),它工作正常.它暂停,等待输入,然后返回Some(int).

如果我将代码复制并粘贴到命令行的FSI中,它的效果很好.

但是当我在视觉工作室中,并且我在FSI中运行代码(突出显示+ alt + enter)时,它恰好在输入部分上方并且抛出(并且被捕获)异常.

这是我在FSI(在visual studio中)运行时的输出:

Enter a number:
Invalid number!
0
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它实际上并没有暂停并等待我输入输入.

有谁知道如何使这项工作?

谢谢!

Tom*_*cek 8

Visual Studio中的F#Interactive控制台不支持读取输入,因此无法从控制台请求输入.如果您以交互方式运行代码,则始终可以在编辑器中输入输入,因此最佳解决方法是let在运行代码之前在输入输入的开头进行绑定.您可以使用它#if来支持两种方案:

#if INTERACTIVE
// TODO: Enter input here when running in F# Interactive
let input = "42"
#endif

try 
    #if INTERACTIVE
    Some(int32 input)
    #else
    let x = System.Console.ReadLine(); 
    Some(int32(x)) 
    #endif
with 
    | :? System.FormatException -> 
        printfn "Invalid number!" 
        Some(0) 
Run Code Online (Sandbox Code Playgroud)

  • "F#**Interactive**控制台......"和"......不支持阅读输入......"在一起太多了:D (4认同)