2013-08-29 11 views
5

Wenn ich zwei Bedingungen mit und in lua überprüfe, welcher Weg ist schneller in der Laufzeit?Lua - Wenn und und, was ist schneller?

if bool and somefuntion() then 
    do stuff 
end 

oder

if bool then 
    if somefuntion() then 
     do stuff 
    end 
end 

?

+1

Vielleicht gibt es einen theoretischen Ansatz, aber in der Praxis bezweifle ich, dass es messbar ist. Haben Sie Probleme mit einem der Sytax? – Jan

+0

Nein, aber die Funktion hat eine lange Ausführungszeit. Ich frage mich nur, ob es läuft, wenn bool falsch ist. – Fox

+2

ah, dann sollten Sie vielleicht diese Frage gestellt haben. Aber die Antwort unten ist richtig. – Jan

Antwort

10

Run luac -l -p auf beiden Fragmente, und Sie werden sehen, dass sie erzeugen genau die gleiche Bytecode. Also schreibe, was für dich klarer ist.

Der Grund, warum sie die gleichen sind, ist, dass Lua Kurzschlussauswertung für und und oder verwendet, wie von OllieB erwähnt.

5

Lua wird langsam ausgewertet, also sollte es keinen Unterschied machen.

Der gleiche Effekt würde für Kurzschluss logisch und (& &) in C/C++

+0

Was ist, wenn die somefunction() sehr lang ist? – Fox

+1

@Fox: Ich denke, Sie verstehen die Begriffe laziy ausgewertet oder Kurzschluss Betrieb nicht. Wenn bool falsch ist, wird lua irgendeine Funktion() in keiner der Inkarnationen überhaupt auswerten. – OllieB