我是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类型的值?
答案 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语法。经历了一点经历后,情况并非如此糟糕。