为什么这个布尔表达式 return 在每一项都为真时为假?

Why does this boolean expression return false when each term is true?

> (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

>