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

编译后的PolyML程序如何获取运行时命令行参数?

解决PolyML编译程序获取运行时命令行参数的问题

你的判断完全正确:PolyML中顶级的val绑定会在编译阶段求值,所以val args = CommandLine.arguments()捕获的是编译polyc命令自身的参数,而非程序运行时传入的参数。

解决方案

把获取命令行参数的逻辑移到main函数内部,确保代码在程序运行时执行,才能拿到正确的运行时参数。

修改后的代码示例:

fun main () =
    let
        val args = CommandLine.arguments()
    in
        app (fn s => (print s ; print "\n\n")) args
    end

val _ = main ()

编译与运行

使用原有命令编译:

polyc print_args.ml -o print_args

执行程序时传入参数:

./print_args foo bar

此时会输出预期的:

foo

bar

另一种方式:使用PolyML.export指定入口

也可以通过PolyML.export明确指定程序入口函数,这种方式更符合编译型程序的规范:

fun main () =
    let
        val args = CommandLine.arguments()
    in
        app (fn s => (print s ; print "\n\n")) args
    end

val _ = PolyML.export("print_args", main)

编译时直接运行:

polyc print_args.ml

生成的print_args可执行文件运行时同样能正确获取命令行参数。

内容的提问来源于stack exchange,提问作者Lex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:45:01