在let表达式中使用整数引用

时间:2017-04-24 07:49:09

标签: ocaml

我正在尝试第5课第6课中的代码示例 Try Ocaml tutorial

我们应该修复此代码示例:

let one =
  let accum = ref -54 in
  for i = 1 to ten do accum := !accum + i done ;
  !accum

这是我的尝试:

let one =
  let accum = ref -54 in (
      for i = 1 to 10 do
        accum := accum + i
      done
    ;
      !accum
    )

但遗憾的是我收到了错误消息:

  

第2行,字符14-17:错误:此表达式的类型为'a - > '参考          但是期望表达式为int

2 个答案:

答案 0 :(得分:2)

你在val counter = MetricsStatsReceiver.defaultRegistry.createCounter("requests_counter")周围缺少括号。

-54

let one = let accum = ref (-54) in for i=1 to 10 do accum := !accum + i done; !accum ;; 是一个类型为ref的函数,减号运算符'a -> 'a ref的类型为(-)。在这里,int -> int -> int54,但int不是,因此是类型错误消息。

答案 1 :(得分:0)

ocaml的词法分析器的一个奇怪之处是-54对应于两个标记。

因此,您的代码对应于 let accum = ref (-) 54 in

产生上述类型错误。解决方案是添加括号并写入(-54)