OCaml中存在未使用值声明时为何无法编译?
为何无法编译包含未使用值的OCaml程序?
你遇到的其实是OCaml的警告32(unused-value-declaration),默认情况下它只是警告,但如果你的编译配置把警告当作错误处理(比如启用了-warn-error选项),就会导致编译失败。
原因
你定义的函数foo是顶级作用域的变量,但整个程序里没有任何地方调用或引用它,OCaml编译器会认为这是潜在的代码冗余,所以触发这个警告。
解决办法
- 实际使用这个函数:在代码里添加调用
foo的逻辑,比如:let foo a b = a + b let () = print_int (foo 2 3) (* 调用foo,消除警告 *) - 调整编译参数:如果确实不需要使用
foo,可以关闭这个警告,编译时加上参数-w -32,比如:
要是之前开启了警告转错误,也可以单独排除警告32:ocamlc -w -32 your_file.mlocamlc -warn-error +a-32 your_file.ml - 用下划线开头命名:OCaml会把以下划线开头的顶级变量视为“故意未使用”,不会触发警告:
let _foo a b = a + b - 局部标注忽略警告(OCaml 4.03+):在函数定义上方加标注,仅忽略这个值的警告:
[@@@warning "-32"] let foo a b = a + b
内容的提问来源于stack exchange,提问作者bitorhugo
相关产品推荐
相关产品推荐

