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

use*_*820 7 ocaml

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

设f = [fun x - > -x; fun x - > x + 2; fun x - > x*x]

nlu*_*oni 10

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

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

(fun x -> 
    let _ = -x in
    (fun y -> 
        let _ = y+2 in 
        (fun z -> z*z)))
Run Code Online (Sandbox Code Playgroud)

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

(fun x -> 
    -x;
    (fun y -> 
        y+2;
        (fun z -> z*z)))
Run Code Online (Sandbox Code Playgroud)

你可以从返回的类型中(int -> int -> int -> int) list看出,你的意图会立刻出现问题.你需要在每个周围添加括号,比如(fun x -> x+2);实际创建一个列表.

  • 将分号扩展为某些东西并不能使问题更加清晰.要向初学者解释错误的优先级或相关性,您只需要使用括号:`[fun x - >(-x; fun x - > x + 2;(fun x - > x*x))]`. (3认同)