You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Core.Command.run在v0.14至v0.15间API变更?求替代方案

Core v0.15 中 Core.Command.run 废弃后的替代方案

问题场景

以下代码在Core v0.14(OCaml 4.10)环境可正常编译,但在Core v0.15(OCaml 4.11)中编译失败:

open Core;;
let command = Command.basic ~summary:"essai" (
  let open Command.Let_syntax in
  let%map_open s = anon(sequence ("n" %: int))  in 
  fun () ->
    List.iter s ~f:(fun x -> Printf.printf "n = %d\n" x ) ;
  )

let () = Command.run ~version:"0.0" ~build_info:"RWO" command;;

编译报错信息

File "cli.ml", line 10, characters 9-20:
10 | let () = Command.run ~version:"0.0" ~build_info:"RWO" command;;
              ^^^^^^^^^^^
Error (alert deprecated): Core.Command.run
[since 2021-03] Use [Command_unix]
File "cli.ml", line 10, characters 9-20:
10 | let () = Command.run ~version:"0.0" ~build_info:"RWO" command;;
              ^^^^^^^^^^^
Error: This expression has type [ `Use_Command_unix ]
       This is not a function; it cannot be applied.

解决方案

Core v0.15 开始将 Unix 相关的命令行运行功能拆分到了 Command_unix 模块,原 Core.Command.run 已被废弃(不再是可调用的函数,仅作为提示标识存在)。只需做两处修改:

  • 打开 Core_unix 模块(或在保留 open Core 的同时额外打开 Command_unix)
  • 将 Command.run 替换为 Command_unix.run

修改后的完整代码:

open Core_unix;;
let command = Command.basic ~summary:"essai" (
  let open Command.Let_syntax in
  let%map_open s = anon(sequence ("n" %: int))  in 
  fun () ->
    List.iter s ~f:(fun x -> Printf.printf "n = %d\n" x ) ;
  )

let () = Command_unix.run ~version:"0.0" ~build_info:"RWO" command;;

若需保留 open Core,也可以这样写:

open Core;;
open Command_unix;;
let command = Command.basic ~summary:"essai" (
  let open Command.Let_syntax in
  let%map_open s = anon(sequence ("n" %: int))  in 
  fun () ->
    List.iter s ~f:(fun x -> Printf.printf "n = %d\n" x ) ;
  )

let () = run ~version:"0.0" ~build_info:"RWO" command;;

内容的提问来源于stack exchange,提问作者Pierre G.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 14:48:17