In Lua, ohne einen L-Wert, der den = Operators scheint zu einem Druck (r-Wert) gleichwertig ist, sind hier einige Beispiele in den Lua eigenständigen Interpreter ausgeführt:Lua = Operator als Druck
> = a
nil
> a = 8
> = a
8
> = 'hello'
hello
> = print
function: 003657C8
Und so weiter ...
Meine Frage ist: Wo finde ich eine detaillierte Beschreibung dieser Verwendung für den Operator =? Wie funktioniert es? Ist es ein spezieller Standard-L-Wert? Ich denke, die Wurzel meines Problems ist, dass ich keine Ahnung, was in Google eingeben Informationen über sie finden :-)
bearbeiten:
Danke für die Antworten, Sie haben Recht, es ist eine Eigenschaft von der Dolmetscher. Dumme Frage, denn ich weiß nicht, aus welchem Grund ich das Offensichtliche völlig übersehen habe. Ich soll Posting vor dem Morgenkaffee :-) Für Vollständigkeit vermeiden, hier ist der Code mit diesem in dem Interpreter zu tun:
while ((status = loadline(L)) != -1) {
if (status == 0) status = docall(L, 0, 0);
report(L, status);
if (status == 0 && lua_gettop(L) > 0) { /* any result to print? */
lua_getglobal(L, "print");
lua_insert(L, 1);
if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0)
l_message(progname, lua_pushfstring(L,
"error calling " LUA_QL("print") " (%s)",
lua_tostring(L, -1)));
}
}
edit2:
Um wirklich vollständig, der ganze Trick zu drängen Werte auf dem Stapel ist in der "pushline" -Funktion:
if (firstline && b[0] == '=') /* first line starts with `=' ? */
lua_pushfstring(L, "return %s", b+1); /* change it to `return' */
aber warum blockiert es nicht die falsche Syntax? –
Sollte es nicht auch 8 auf "a = 8" drucken? Ich weiß, dass viele Scripting-Konsolen das tun (Python, Irb, Perl-D -e 0 usw.), aber ich habe es gerade versucht. LUA druckt nicht den Wert aller Anweisungen, nur "= ...". – jkramer