Seltsame Rückkehrerklärung in Lua

8

Ich durchstöbere einen Lua-Code auf Github, wo ich verschiedene Aussagen wie return Memory.value("game", "textbox") == 1 sehe.
Ist dies "gleich" return if value ==1 oder if value == 1 return true, else return false ?

    
Griffin Young 21.02.2016, 22:45
quelle

3 Antworten

4

return ist ein Schlüsselwort und hat keine Bedingung als Argument, sondern als Ausdruck. Wenn Sie return explizit angeben, wird es zurückgegeben. Es wertet jedoch seine Argumente aus, wenn der logische Aspekt ins Spiel kommt.

Ich werde in den logischen Aspekt einsteigen.

== ist ein Vergleichsoperator, der prüft, ob Argumente gleich sind . Wenn ja, ist es wahr. Wenn% return in return verwendet wird, wird == ausgewertet und gibt true zurück, wenn sie gleich sind.

Dies ist nicht beschränkt auf ~= , beliebige Vergleichsoperatoren ( <= , >= , < , > , and ) machen das genau gleiche Sache .

or , return a and b funktioniert jedoch etwas anders. Sie geben nicht wahr / falsch zurück. So verhalten sie sich:

return a or b : Dies wird im Grunde zu ausgewertet, wenn a wahr ist (weder false noch nil) return b

return a and b or c : Dies bedeutet im Grunde genommen, dass * wenn a wahr ist (weder falsch noch nil) a zurückgibt, andernfalls return b

Wie Sie sich vorstellen können, bedeutet etwas wie return a and b or c

%Vor%

So return ((a and b) or c) ist das Äquivalent zu not

Aus Gründen der Vervollständigung wertet %code% simply es aus und invertiert es . Wenn es also false / nil ist, gibt es true zurück, andernfalls false.

    
warspyking 22.02.2016, 02:41
quelle
9

Die return -Anweisung erwartet einen Ausdruck als Argument. Das heißt, wenn Sie return expression schreiben, soll der bewertete Wert von expression zurückgegeben werden.

In diesem speziellen Fall ist Memory.value("game", "textbox") == 1 ein Ausdruck, der als true ausgewertet wird, wenn der Rückgabewert von Memory.value("game", "textbox") gleich 1 ist. Wenn Memory.value("game", "textbox") ein anderer Wert als 1 wäre, würde der Ausdruck als false ausgewertet werden, was die return -Anweisung zurückgeben würde.

Sie könnten die angegebene Anweisung einfach als

schreiben %Vor%

Da dies jedoch logisch redundant ist, sollten Sie vermeiden, diesen Code zu schreiben und stattdessen den von Ihnen bereitgestellten Liner verwenden.

    
Torsten Scholz 21.02.2016 23:14
quelle
5

Ihre Frage besagt, dass Sie Perl kennen. Nein, es ist nicht wie Perl, wo die Bedingung von 'if' und ähnliche Aussagen der Aussage folgen können.

return erwartet eine Liste von null oder mehr Rückgabewerten. Eine Funktion kann eine beliebige Längenliste zurückgeben. Es kann auch eine beliebige Anzahl von return-Anweisungen enthalten und sie müssen keine Listen mit der gleichen Länge oder Bedeutung zurückgeben. Also, die Dokumentation der Funktion ist wichtig. Ein Beispiel hierfür finden Sie unter laden .

Diese Anweisung gibt true oder false zurück.

Er behandelt den von Memory referenzierten Wert als Tabelle, indiziert ihn mit "value", ruft den resultierenden Wert als Funktion mit zwei String-Argumenten auf und vergleicht das Ergebnis des Funktionsaufrufs mit dem Wert 1.

    
Tom Blodget 21.02.2016 23:20
quelle

Tags und Links