我正在使用Getopt来解析commands.ml中的命令行参数。所以commands.ml的第一行看起来像这样:
File "commands.ml", line 1, characters 5-11:
Error: Unbound module Getopt
我似乎无法弄清楚如何用这个模块编译commands.ml。我尝试了很多东西,但我总是遇到以下错误:
# The data
set.seed(144)
dat <- data.frame(V1=1:100,V2=rnorm(100)>0)
dat$V3 <- dat$V2 == 1
head(dat)
# V1 V2 V3
# 1 1 FALSE FALSE
# 2 2 TRUE TRUE
# 3 3 FALSE FALSE
# 4 4 FALSE FALSE
# 5 5 FALSE FALSE
# 6 6 TRUE TRUE
# Convert all to numeric
cols <- sapply(dat, is.logical)
dat[,cols] <- lapply(dat[,cols], as.numeric)
head(dat)
# V1 V2 V3
# 1 1 0 0
# 2 2 1 1
# 3 3 0 0
# 4 4 0 0
# 5 5 0 0
# 6 6 1 1
我已将#require“Getopt”添加到我的.ocamlinit文件中。
答案 0 :(得分:3)
您说您正在使用Getopt
,“所以”您的代码中有open Getopt
。但那里没有直接联系。通常(并且在我看来通常更好)使用模块而不打开它们。
open
的使用仅控制包含模块中可用的名称。它不会告诉编译器在哪里查找已打开的模块。
标准OCaml库中没有Getopt
模块。用于解析命令行的标准模块名为Arg
。如果您正在使用外部库,则需要使用-I
标志告诉编译器在哪里查找它。
.ocamlinit
文件控制OCaml toplevel(read-eval-print解释器)的行为。它不会影响编译器的行为。
如果您正在使用构建工具,则可能有更简单的方法来进行设置。但是你需要更仔细地解释你的构建环境。
答案 1 :(得分:1)
问题是,你的问题有很多答案。根据您选择的构建系统,将有不同的命令。这就是为什么我们要问的原因。但看起来,你没有偏好,所以让我试着给你一些答案。
ocamlbuild
$ ocamlbuild -package getopt commands.native
ocamlfind
$ ocamlfind ocamlopt -package getopt commands.ml -o commands.native
有关详细说明,请阅读following。
个人建议:如果您不确定选择什么,请使用ocamlbuild
。
答案 2 :(得分:1)
将ocamlfind
与您首选的编译器一起使用(我在下面使用ocamlopt),如下所示:
ocamlfind ocamlopt -package getopt -linkpkg commands.ml -o commands
如果您没有安装getopt,这仍然会失败。 Getopt可以与opam一起安装:
opam install getopt
我建议你改用Arg
。它是OCaml标准库的一部分,通常很愉快。