如何强制获取OCaml函数来返回int类型值而不是单元?

时间:2014-07-19 05:23:01

标签: ocaml

我是OCaml的新手。

我正在研究一些代码,其中以下函数嵌套在另一个函数中,该函数必须返回一个int类型的值。

Asn(x,e) ->
      let v = eval e in
        Array.set vararr x+1 v

vararr是一个已在上面声明和初始化的全局数组。

在这个函数中,我想使用“Array.set vararr x + 1 v”设置数组的元素,但我希望函数返回值v。我该怎么做?

更新

我把它改为:

Asn(x,e) ->
      let v = eval e in
        Array.set vararr x+1 v; 
      v

“Array.set vararr x + 1 v;”的错误是:

This expression has type int -> unit
       but an expression was expected of type int

我认为问题不在于Asn的回归。问题在于“Array.set vararr x + 1 v;”回报。这很奇怪!为什么“Array.set vararr x + 1 v;”必须返回一个int类型的值?

1 个答案:

答案 0 :(得分:4)

我想你想要这个:

let v = eval e in
Array.set vararr (x + 1) v;
v

<强>更新

请勿忘记(x + 1)周围的括号。

表达式:

Array.set vararr x+1 v

解析如下:

(Array.set vararr x) + (1 v)

OCaml中的函数应用程序具有很高的优先级。

+运算符想要左边的int,但是你有一个函数。

一般来说,您只需要习惯OCaml语法。经历了一点经历后,情况并非如此糟糕。