输入int ref但是期望int

时间:2017-10-08 10:46:47

标签: compiler-errors reference ocaml typeerror

let nombredeCubes = ref 0  in
for i = 1 to 17 do
   nombredeCubes := nombredeCubes + i*i*i
   i := i+1
done;
print_int nombredeCubes;

当我尝试编译此代码时,出现以下错误:

line 3, characters 20-33:
Error: This expression has type int ref
       but an expression was expected of type int

但我不明白为什么。我的意思是为什么“for”期望一个int而不是一个int ref,是“for”一个函数?

1 个答案:

答案 0 :(得分:1)

您需要使用!运算符来访问ref单元格的值:

nombredeCubes := !nombredeCubes + i*i*i

您也不应该(并且不会被允许)手动增加i。 for构造将为您做到这一点。

编辑:使用递归而不是突变和命令式编程来解决这个问题会更加惯用。它也会使步进更清晰:

let nombredeCubes =
  let rec loop acc = function
  | i when i > 0 -> loop (acc + i*i*i) (i-2)
  | _ -> acc
  in loop 0 17
in print_int nombredeCubes