Как вы используете Console.Readline в F #? В отличие от Console.Writeline, это не выполняется, когда я его вызываю.
Почему Console.Readline не работает, но Console.Readline() делает?
Ответ 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() |> игнорировать