F#,赋值运算符与集合运算符

Rre*_*Cat 2 f#

我从F#开始,有些代码结构令我惊讶。例如:

我有下一个代码:

let mutable s = 10
s <- 1 + s
printf "%i" s
Run Code Online (Sandbox Code Playgroud)

从数学的角度来看,一切都是清楚的。我将“ s”标记为可变的,并将新值分配给“ s”。结果是11。

让我尝试代码的其他部分:

let mutable s = 10
s = 1 + s
printf "%i" s
Run Code Online (Sandbox Code Playgroud)

此代码已工作。但是我s = 1 + s从数学角度看这有点奇怪。执行结果为10。

我的问题是,上一个样本中发生了什么?为什么我没有收到错误消息?是s = 1 + s不理?为什么?我的输出没有任何错误。

Joh*_*mer 5

代码

s=1+s
Run Code Online (Sandbox Code Playgroud)

将不会修改s-等效的C#是

s==1+s
Run Code Online (Sandbox Code Playgroud)

刚刚返回 false

实际上,编译器应该已经在该行上发出了有关未使用值的警告。

=运营商只是做一个平等的检查-它并没有指定任何值。