OCaml模块命名疑问:以数字开头为何触发Dune构建报错?
OCaml模块名不能以数字开头的问题解答
是的,你猜的没错——OCaml的模块名确实存在“不能以数字开头”的限制,这是OCaml语言本身的标识符规则,dune的报错提示没明确点明这一点,才导致了你的困惑。
OCaml中,模块名作为标识符,必须满足:
- 首字符只能是字母(大小写均可)或下划线
_ - 后续字符可以是字母、数字、下划线
_或撇号'
你用01_calorie_counting作为项目名时,dune会默认把项目名作为根模块名,而这个名字以数字开头,违反了OCaml的语法规则,所以dune build会报错。
解决办法
- 最直接的方式是重命名项目目录,改成以字母/下划线开头的名字,比如
calorie_counting_01或_01_calorie_counting,之后重新执行dune build即可正常编译。 - 如果不想修改目录名,可以手动修改项目根目录下的
dune文件,将(name 01_calorie_counting)改成符合规则的模块名,比如(name calorie_counting_01),同时调整lib/01_calorie_counting.ml等文件的文件名(保持和模块名一致),不过这种方式容易引发后续路径匹配问题,更推荐前者。
内容的提问来源于stack exchange,提问作者ScottishTapWater
相关产品推荐
相关产品推荐

