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

时间:2011-11-05 19:01:53

标签: visual-studio f# input

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

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

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

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

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

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

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

Enter a number:
Invalid number!
0

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

任何人都知道如何使这项工作?

谢谢!

4 个答案:

答案 0 :(得分: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) 

答案 1 :(得分:0)

如果你打开F#interactive作为自己的进程(通过直接运行fsi.exe,代码工作正常 - 这就是我发生的事情:

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

val r : int32 option = Some 5

答案 2 :(得分:0)

尝试以下,在我的机器上运行正常(VS 2013,F#3.1 12.0.21005.1)

{
"@context": "http://schema.org",
"@type": "WebPageElement",
"offers": {
    "@type": "Offer",
    "itemOffered": [
        {
            "@type": "Product",
            "@id": "/category/t-shirt/p-1",
            "description": "Nobis vel fugiat e",
            "name": "Yellow Lopez-Smith",
            "offers": {
                "@type": "Offer",
                "availability": "http://schema.org/InStock",
                "price": "18.28",
                "priceCurrency": "GBP",
                "itemCondition": "http://schema.org/NewCondition",
                "description": "Nobis vel fugiat e",
                "name": "Yellow Lopez-Smith",
                "gtin13": "68614",
                "category": "T-Shirt",
                "image": {
                    "@context": "http://schema.org",
                    "@type": "ImageObject",
                    "contentUrl": "/media/__sized__/products/yellow_n2QjKzn-thumbnail-640x640-70.jpg",
                    "description": "Lopez-Smith",
                    "width": 640,
                    "height": 640
                }
            }
        },
        {
            "@type": "Product",
            "@id": "/category/t-shirt/p-2",
            "description": "Nobis vel fugiat e",
            "name": "Blue Lopez-Smith",
            "offers": {
                "@type": "Offer",
                "availability": "http://schema.org/InStock",
                "price": "22.64",
                "priceCurrency": "GBP",
                "itemCondition": "http://schema.org/NewCondition",
                "description": "Nobis vel fugiat e",
                "name": "Blue Lopez-Smith",
                "gtin13": "73963",
                "category": "T-Shirt",
                "image": {
                    "@context": "http://schema.org",
                    "@type": "ImageObject",
                    "contentUrl": "/media/__sized__/products/blue_FZ3yJjG-thumbnail-640x640-70.jpg",
                    "description": "Lopez-Smith",
                    "width": 640,
                    "height": 640
                }
            }
            }
        ]
    }
}

答案 3 :(得分:0)

在Visual Studio for Mac社区,7.4(build 1033)中,我在编译和运行源文件时遇到了这个问题,而不是脚本。

如果我使用集成控制台(它出现在输出窗口旁边),我无法使用System.Console.ReadLine()读取输入。

当我切换到外部控制台时,通过选中默认运行配置(项目 - >选项 - >运行:配置:默认)中的“在外部控制台上运行”复选框,我可以读取输入。 / p>