微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

变量不是实例变量

如何解决变量不是实例变量

我做了这个阶乘解算器,但输出的是:

  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声明为变量。

进行此编译所需的更改是:

  1. 使用let
  2. 声明变量
  3. 使用ref将变量设为mutable reference
  4. 使用^
  5. 访问引用的值
  6. 使用:=
  7. 为引用分配新值
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 举报,一经查实,本站将立刻删除。