问题描述
我做了这个阶乘解算器,但输出的是:
We've found a bug for you!
6| let factorialNumber = 0;
7| Js.log(factorial(factorialNumber));
(error here)8| factorialNumber = factorialNumber + 1;
9|}
The value factorialNumber is not an instance variable
let rec factorial = (n) =>
n <= 0
? 1
: n * factorial(n - 1);
while (true){
factorialNumber = 0
Js.log(factorial(factorialNumber));
factorialNumber = factorialNumber + 1
}
解决方法
有道理,variables are immutable by default。您也不会在任何地方将factorialNumber
声明为变量。
进行此编译所需的更改是:
- 使用
let
声明变量
- 使用
ref
将变量设为mutable reference - 使用
^
访问引用的值
- 使用
:=
为引用分配新值
while (true) {
let factorialNumber = ref(0);
Js.log(factorial(factorialNumber^));
factorialNumber := factorialNumber^ + 1
}
但是,这仍然没有多大意义,因为您仍在每次迭代中运行factorial(0)
。我怀疑您要在循环外移动声明和初始赋值,以便在每次迭代时将其递增一:
let factorialNumber = ref(0);
while (true) {
Js.log(factorial(factorialNumber^));
factorialNumber := factorialNumber^ + 1
}