为什么当每个项都为 true 时,这个布尔表达式会返回 false?

0 io f# f#-interactive

> (Console.Read() = (int 'd'));;
d
val it: bool = true

> (Console.Read() = (int 'd')) && (Console.Read() = (int 'o'));;
val it: bool = false
Run Code Online (Sandbox Code Playgroud)

它似乎在没有调用 Read 的情况下终止,编译器如何知道使表达式为 false?

Jim*_*oye 5

使用 Read() 时必须小心,它还会获取行终止符。如果您启动一个干净的 F# 交互式会话并执行以下操作,您可以看到这一点:

> Console.Read();;
d
val it : int = 100

> Console.Read();;
val it : int = 13

> Console.Read();;
val it : int = 10
Run Code Online (Sandbox Code Playgroud)

显然我是在 Windows 上执行此操作的,因为行终止符是 \r\n。

您可能应该使用 ReadKey()(不能在 FSI 会话中使用)或 ReadLine()。例如,

> Console.ReadLine() = "do";;
do
val it : bool = true

> 
Run Code Online (Sandbox Code Playgroud)