警告10:此表达式应具有类型单位

时间:2011-10-31 04:00:14

标签: ocaml

我正在尝试在Ocaml中创建一个函数列表,但我一直在收到警告。知道为什么吗?

让f = [fun x - > -x;有趣的x - > x + 2;有趣的x - > X * X]

1 个答案:

答案 0 :(得分:10)

分号也用于结束用于副作用的功能。当这些函数的返回类型不是unit时(这种情况下为int),会出现警告;它们只是警告,因为你可能只打算使用副作用,通常这是一个错误。这是暂且的,但要以编程方式和安全地使用ignore函数来抑制这些警告,如ignore (x+2);中那样。

回到你的问题,在其中(并将分号扩展到它们的等价;并修改每个函数的变量)你实际上在写,

(fun x -> 
    let _ = -x in
    (fun y -> 
        let _ = y+2 in 
        (fun z -> z*z)))

或者,另一个例子,如汽油指出,

(fun x -> 
    -x;
    (fun y -> 
        y+2;
        (fun z -> z*z)))

您可以从返回的类型(int -> int -> int -> int) list判断出您的意图会立即出现问题。您需要在每个周围添加括号,例如(fun x -> x+2);以实际创建列表。