2008-09-27 7 views
5

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' */ 

Antwort

15

die man page Zitiert:

Im interaktiven Modus ... Wenn eine Zeile mit ‚=‘ beginnt, dann zeigt lua die Werte aller Ausdrücke in dem Rest der Zeile. Die Ausdrücke müssen durch Kommas getrennt sein.

3

Ich denke, das muss ein Merkmal des eigenständigen Interpreters sein. Ich kann die Arbeit an nichts, in das ich Lua kompiliert habe, machen.

1

Ich würde es nicht eine Funktion nennen - der Interpreter gibt nur das Ergebnis der Anweisung zurück. Es ist sein Job, oder?

+0

aber warum blockiert es nicht die falsche Syntax? –

+0

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

0

Zuweisung ist kein Ausdruck, der etwas in Lua zurückgibt, wie es in C ist.