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)
正如你所看到的,它实际上并没有暂停并等待我输入输入.
有谁知道如何使这项工作?
谢谢!
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)