Ответ 1
Из руководство:
Программы, использующие библиотеку str, должны быть связаны следующим образом:
ocamlc other options str.cma other files ocamlopt other options str.cmxa other files
Я хочу использовать регулярные выражения в OCaml, и кажется, что модуль Str
предоставляет эти функции.
Итак, я попробовал простую программу:
open Str
let regx = regexp "."
но это дает мне следующую ошибку:
Файл "lol.ml", строка 1, символы 0-1: Ошибка: Ошибка при связывании lol.cmo: Ссылка на undefined глобальную `Str '
Как будто модуль отсутствует, но если я удалю open Str
, он говорит, что regexp
является несвязанным значением.
Я не понимаю, какая проблема, Str
должен быть стандартным модулем (согласно http://caml.inria.fr/pub/docs/old-311/libref/Str.html), поэтому Я не знаю. Единственное, что я думал, это то, что подпись (mli
) присутствует, но реализация (ml
) не является.
Я запускаю Objective Caml version 3.11.0
в соответствии с инструментом ocaml
.
Может кто-нибудь помочь мне понять это? Спасибо заранее
Из руководство:
Программы, использующие библиотеку str, должны быть связаны следующим образом:
ocamlc other options str.cma other files ocamlopt other options str.cmxa other files
Или вы можете положить
#load "str.cma";;
если вы делаете это в интерпретаторе
В качестве альтернативы модулю Str
также Re2
.
opam install re2
Используйте модуль в your_file.ml
следующим образом:
open Re2.Std
open Re2.Infix
let change input_text = Re2.rewrite_exn ~/"change this" "to that" input_text
let () = printf "%s" (change "change this")
Скомпилировать с помощью ocamlbuild -use-ocamlfind -package re2 -package core -tag thread your_file.byte