Frage

Könntest du, bitte, geben Sie ein code-snippet zeigt, wie zu verwenden Lua-eingebettet in OCaml?

Ein einfaches Beispiel könnte ein "Hallo, Welt" - Variante.Haben OCaml den Benutzer auffordern, einen Namen.Dann passieren, dass Namen, zu einer Lua-Funktion.Haben die Lua-print, einen Gruß und die Rückkehr der Länge des namens.Dann haben OCaml drucken Sie eine Nachricht über die Länge des namens.

Beispiel:

Benutzer@desktop:~$ ./Hallo.opt

Name? Benutzer

Hallo, User.

Ihr name ist 4 Buchstaben lang.

Benutzer@desktop:~$

[Bearbeiten]

Als nicht-C-Programmierer sind, könnte ich dies umsetzen, ohne zu schreiben eine zwischengeschaltete C-Programm übergeben werden, die Daten zwischen Lua und OCaml?

Folgenden wird eine theoretische Vorstellung von dem, was ich gerne ausprobieren würde.Leider, Zeile 3 von ocaml_hello.ml würde müssen wissen, wie Sie zum Aufruf der Funktion definiert lua_hello.lua, damit der code gültig ist.

lua_hello.lua Definiert lua_hello, die Drucke ein argument und gibt die Länge.

1  function lua_hello (name)
2    print ("Hello, "..name..".")
3    return (string.len (name))
4  end

ocaml_hello.ml OCaml zur Eingabe eines namens auffordert, ruft die Lua-Funktion und gibt den Wert zurück.

1  let () = print_string "Name? "; flush stdout in
2  let name = input_line stdin in
3  let len  = Lua_hello.lua_hello name in
4    Printf.printf "Your name is %d letters long." len; flush stdout;;
War es hilfreich?

Lösung

Ich bin mir nicht bewusst, eine Reife Satz von Bindungen für die Einbindung der C-Implementierung von Lua in OCaml.Eine unreife Satz von Bindungen wurde veröffentlicht auf Caml-mailing-Liste, 2004.

Wenn Sie möchten, verwenden Sie die ML-Implementierung finden Sie einige Beispiele in einem Papier namens ML Modul-Mania.Die ML-Implementierung, im Gegensatz zu der C-Implementierung, die Garantien geben Sicherheit, aber es nutzt einige sehr Skorbut tricks in das ML-Modul-system.Wenn Sie sich Fragen, grundlegende Fragen, die Sie wahrscheinlich vermeiden möchten.

In Ihrem Beispiel ist es ein wenig schwer zu erraten, wo Sie möchten die Funktion zu kommen.Ich schlage vor, Sie bitten, für ein C-Beispiel, oder geben Sie den Menschen ein C-Beispiel und Fragen uns, wie es realisiert werden konnte, ist in OCaml (obwohl ich denke, dass Bindungen sind zu einem problem werden).


Bearbeiten

In Reaktion auf die überarbeitete Frage, es ist ziemlich kompliziert.Das übliche Modell ist, dass Sie sich setzen würde, Lua zuständig sind, und Sie nennen würde, Objective Caml-code von Lua.Sie setzen Caml-in-charge, die Dinge noch komplizierter macht.Hier ist eine grobe Skizze dessen, was die Dinge Aussehen könnte:

let lua = Lua.new()  (* create Lua interpreter *)
let chunk = LuaL.loadfile lua "hello.lua" (* load and compile the file hello.lua *)
let _ = Lua.call lua 0 0 (* run the code to create the hello function *)
let lua_len s =
  (* push the function; push the arg; call; grab the result; pop it; return *)
  let _ = Lua.getglobal lua "lua_hello" in
  let _ = Lua.pushstring lua s in
  let _ = Lua.call lua 1 1 in
  let len = Lua.tointeger lua (-1) in
  let _ = Lua.pop lua 1 in
  len

let () = print_string "Name? "; flush stdout
let name = input_line stdin
let len  = lua_len name
Printf.printf "Your name is %d letters long." len; flush stdout;;

Wieder, ich weiß nicht, wo Sie die Bindungen für die Lua und LuaL Module.

Andere Tipps

Weiter nachdenken, ich bin mir nicht sicher, ob dies können Sie mit der offiziellen C-Implementierung von Lua, weil ich denke, dass OCaml glaubt es besitzt main().Sie würde haben zu finden heraus, ob OCaml könnte verpackt werden, wie eine Bibliothek aus einem C-Hauptprogramm.

Ein Beispiel für das setzen Lua-ML-in-charge, die Sie bekommen können Lua-ML standalone von Cminusminus.org und schauen Sie sich auch die Beispiele in der Papier auf Lua-ML sowie den Quellcode der QC-compiler selbst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top