为什么没有到Console.ReadLine工作,但到Console.ReadLine()呢?

问题描述 投票:10回答:4

你如何在F#中使用到Console.ReadLine?不像Console.Writeline,它没有被当我把它兑现。

f# console
4个回答
29
投票

如果您使用

let s = Console.ReadLine

你只建立指向的ReadLine功能的委托。你需要说

let s = Console.ReadLine()

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


8
投票

你说的“它没有被兑现”呢?下面是我刚刚写在VS2010b1小控制台应用程序,并能正常工作:

open System

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

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

你们是不是要运行从F#互动Visual Studio中的代码?如果是这样,这可能是问题,因为Brian的文章解释。

然而,在命令行中使用F#互动时,我还没有见过同样的问题。这里有一个会话的完整成绩单:

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 [email protected]
For help type #help;;

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

val line : string = "Hello world"

运行Brian的从F#互动循环的代码,并没有表现出同样的问题。

底线:看起来这是在F#互动打破了Visual Studio中,而不是在命令行或在一个完整的控制台应用程序交互的运行时。


3
投票

我没有Beta1的盒旁边,但我知道,在过去,我们已经有一个臭虫的ReadLine()将看到交互式用户界面和运行您的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

打印,当您选中它,“发送到互动”。我想可能你会看到一些意想不到的有趣的线,然后键入到窗口线。


-1
投票

//是,如果你不想使用键入的readline的任何回报的正确方法

到Console.ReadLine()|>忽略

© www.soinside.com 2019 - 2024. All rights reserved.