F#中的不可变值

rst*_*kly 4 f#

我刚刚开始使用F#并且有一个基本问题.

这是代码:

let rec forLoop body times =
    if times <= 0 then
        ()
    else
        body()
        forLoop body (times - 1)
Run Code Online (Sandbox Code Playgroud)

我没有得到如何定义变量它是一个值和不可变的概念.这里,值正在变化以循环.这与C#中的变量有什么不同?

And*_*rey 5

它没有改变.你使用递归.变量保持不变,但减去一个并传递给函数.在这种情况下功能相同.

堆栈看起来像

forLoop body 0
 |
 forLoop body 1
   |
   forLoop body 2
Run Code Online (Sandbox Code Playgroud)


Jef*_*tes 5

提供的代码不会在C#中表示为for循环,它将是递归的(类似这样):

void ForLoop(int times, Action body)
{
  if (times <= 0)
  {
     return;
  }
  else
  {
     body();
     ForLoop(times - 1, body);
  }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,该值times在任何时候都不会改变.