Stdlib.Filename.extension错误:此表达式的类型为string,但应为int类型的表达式


let get_path_elts path = 
let rec walk_dir dirs = 
match dirs with
| [] -> []
| dir::tail -> 
match (stat dir).st_kind with
| S_REG -> if Stdlib.Filename.extension dir = "ml" || Stdlib.Filename.extension dir = "mli" then dir::(walk_dir tail) else walk_dir tail
| S_DIR -> List.concat [walk_dir (Array.to_list (Sys_unix.readdir dir)); (walk_dir tail)]
| _ -> walk_dir tail
in walk_dir [path]
;;

这是我的代码,我把它粘贴到了utop中。但它报告错误:

Error: This expression has type string but an expression was expected of type
int

此代码最初在vscode中的一个文件中,但没有错误。不知道为什么。

core中,=被定义为int -> int -> bool

您需要使用特定于字符串的相等运算符,可以通过本地打开仅用于谓词的String将其引入作用域,例如:

String.(Stdlib.Filename.extension dir = "ml")

最新更新