> (Console.Read() = (int 'd'));;
d
val it: bool = true
> (Console.Read() = (int 'd')) && (Console.Read() = (int 'o'));;
val it: bool = false
Кажется, он завершается без вызова Read, как компилятор узнает, что выражение должно быть ложным?
Вы должны быть осторожны с Read(), он также подбирает символы конца строки. Вы можете увидеть это, если запустите чистый интерактивный сеанс F# и выполните следующие действия:
> Console.Read();;
d
val it : int = 100
> Console.Read();;
val it : int = 13
> Console.Read();;
val it : int = 10
Очевидно, я сделал это в Windows, так как конец строки был \r\n.
Вероятно, вам следует использовать ReadKey() (которую вы не можете использовать в сеансе FSI) или ReadLine(). Например,
> Console.ReadLine() = "do";;
do
val it : bool = true
>
Извините, не уверен, что понимаю ваш вопрос. Кроме того, если вы анализируете текстовые файлы, вы можете использовать что-то вроде File.ReadLines(),
В первом интерактивном сеансе вы можете увидеть букву «d», которую я ввел. Во втором нет. Кажется, это проблема с интерактивным сеансом, поскольку мой код работал в скомпилированном сеансе.
Read() блокируется до тех пор, пока вы не нажмете <Enter>. Затем каждый вызов будет давать вам один символ, пока больше не будет ввода, после чего он снова блокируется. Итак, вы ввели «д». Первый вызов Read() дал вам 100, а следующие два вызова вернули 13 и 10 (которые вы сравнили со 100 и 111). Другой вызов Read() затем снова заблокируется, ожидая нового ввода.
Спасибо за ответ на мой вопрос. Я заинтересован в анализе [текстовых файлов], поэтому я не думаю, что ReadKey был правильным методом. Так же консоль не дождалась ввода, как думаете что она прочитала?