2011-12-18 24 views
12

Próbuję załadować swoje moduły w .cmo do Toplevel, próbowałem:ocaml moduł toplevel loading

$ ocaml mymodule.cmo 

Dostałem toplevel szybka, ale nie może odnosić się do mymodule

próbowałem również

#load "mymodule.cmo" 

nie narzekam, ale wciąż nie może odnosić się do mymodule

próbowałem również

#use "mymodule.ml" 

To wydaje się działać, ale nie ładuje kod do mymodule nazw, co jest problemem, bo rzeczywiście chcesz załadować kilka modułów w najwyższym poziomie, i odnoszą się one do siebie przez ich przestrzeń nazw modułu.

+1

Ah, zorientowałem się przyczyną mojego problemu to pliki CMO są w podkatalogach, - ocaml lib/mymodule.cmo. Musiałem użyć - ocaml -I lib mymodule.cmo, aby móc się do niego odnieść. – romerun

+1

To świetnie, że działasz. Powiedziałeś, że kiedy zrobiłeś '#load" mymodule.cmo "' nie było żadnej skargi. Ale toplevel * będzie * narzekał, jeśli nie będzie mógł znaleźć podanego modułu. Może kilka rzeczy się nie udawało w różnych punktach. Pozdrowienia, –

Odpowiedz

15

Po wykonaniu

#load "mymodule.cmo" 

można znaleźć w module, ale nadal trzeba użyć nazwy modułu:

Mymodule.x 

Jeśli chcesz użyć prostego nazwę (x) musisz również open moduł:

open Mymodule 

To może być sourc e twojego problemu.

Oto sesja, która pokazuje, co mówię:

$ cat mymodule.ml 
let x = 14 
$ ocaml312 
     Objective Caml version 3.12.0 
# load "mymodule.cmo";; 
# x;; 
Characters 0-1: 
    x 
^
Error: Unbound value x 
# Mymodule.x;; 
- : int = 14 
# open Mymodule;; 
# x;; 
- : int = 14 
#