所以我想做一些简单的事情:
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
正如你所看到的,它实际上并没有暂停并等待我输入输入。
任何人都知道如何使这项工作?
谢谢!
答案 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>