如何解决变量不是实例变量
我做了这个阶乘解算器,但输出的是:
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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。