为什么Console.Readline不起作用但是Console.Readline()呢?

时间:2009-06-04 05:59:38

标签: f# console

如何在F#中使用Console.Readline?与Console.Writeline不同,我打电话时不会受到尊重。

4 个答案:

答案 0 :(得分:29)

如果您使用

let s = Console.ReadLine

您只构建一个指向ReadLine函数的委托。你需要说

let s = Console.ReadLine()

实际执行该功能。这就像C#语法一样,除了类型推断意味着你没有得到编译器警告。

答案 1 :(得分:8)

“你没有被尊重”是什么意思?这是我刚刚在VS2010b1中编写的一个小型控制台应用程序,它运行正常:

open System

let line = Console.ReadLine()
Console.WriteLine("You wrote {0}", line)

// Just to make it pause
let unused = Console.ReadLine()

您是否尝试在Visual Studio中运行F#Interactive中的代码?如果是这样,那可能是问题,正如Brian的帖子所解释的那样。

但是,从命令行使用F#Interactive时我没有遇到同样的问题。以下是会话的完整记录:

Microsoft F# Interactive, (c) Microsoft Corporation, All Rights Reserved
F# Version 1.9.6.16, compiling for .NET Framework Version v4.0.20506

Please send bug reports to fsbugs@microsoft.com
For help type #help;;

> open System;;
> let line = Console.ReadLine();;
Hello world

val line : string = "Hello world"

从F#Interactive运行Brian的循环代码没有显示同样的问题。

底线:在Visual Studio中的F#Interactive中似乎已经破坏了这一点,但在从命令行或完整控制台应用程序中以交互方式运行时却没有。

答案 2 :(得分:3)

我没有方便的Beta1盒子,但我知道在过去我们遇到过一个错误,ReadLine()会看到在交互式UI和运行F#代码的后台进程之间进行通信的后台命令。调查什么是

可能很有趣
let Foo max =
    let rec Loop i =
        if i < max then
            let line = System.Console.ReadLine() 
            printfn "line = %s" line
            Loop (i+1)
    Loop 1

Foo 12
突出显示

时打印,然后'发送到互动'。我想你可能会看到一些意想不到的有趣线条,然后是你在窗口中输入的线条。

答案 3 :(得分:-1)

//是正确的方法,如果您不想使用返回到readline中的任何内容的返回

Console.ReadLine()|>忽略