Почему Console.Readline не работает, но Console.Readline() делает?

Как вы используете Console.Readline в F #? В отличие от Console.Writeline, это не выполняется, когда я его вызываю.

Ответ 1

Если вы используете

let s = Console.ReadLine

вы создаете только делегат, который указывает на функцию ReadLine. Вы должны сказать

let s = Console.ReadLine()

чтобы фактически выполнить функцию. Это похоже на синтаксис С#, за исключением вывода типа означает, что вы не получите предупреждение о компиляторе.

Ответ 2

Что вы подразумеваете под словом "это не честь"? Здесь небольшое консольное приложение, которое я только что написал в VS2010b1, и он отлично работает:

open System

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

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

Вы пытаетесь запустить код из F # Interactive в Visual Studio? Если это так, это может быть проблемой, как объясняет Брайан.

Однако, я не видел такой же проблемы при использовании 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 [email protected]
For help type #help;;

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

val line : string = "Hello world"

Запуск кода перебора Брайана из F # Interactive не показал той же проблемы.

Нижняя строка: Похоже, что это нарушено в F # Interactive в 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

печатает, когда вы выделяете его и "Отправить интерактивному". Я думаю, возможно, вы увидите несколько неожиданных интересных строк, за которыми следуют строки, которые вы вводите в окно.

Ответ 4

//это правильный путь, если вы не хотите использовать возврат чего-либо набранного в readline

Console.ReadLine() |> игнорировать