2013-08-29 10 views
5

Quando controllo due condizioni con e in lua, qual è il modo più veloce nel tempo di esecuzione?Lua - Se e, cosa è più veloce?

if bool and somefuntion() then 
    do stuff 
end 

o

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

?

+1

Potrebbe esserci un anwwer teorico ma in pratica dubito che sia misurabile. Hai problemi con qualcuno della sytax? – Jan

+0

No, ma la funzione ha un tempo di esecuzione lungo. Mi sto solo chiedendo se è maledetto quando bool è falso .. – Fox

+2

ah, allora forse avresti dovuto fare quella domanda. Ma la risposta qui sotto è corretta. – Jan

risposta

10

Run luac -l -p su entrambi i frammenti e vedrete che essi generano esattamente lo stesso bytecode. Quindi scrivi ciò che è più chiaro per te.

Il motivo sono gli stessi è che utilizza Lua valutazione di corto circuito per e e o, come detto da OllieB.

5

Lua è pigramente valutato, quindi non dovrebbe fare alcuna differenza.

Lo stesso effetto sarebbe vero di corto circuito logico e (& &) in C/C++

+0

Cosa succede se la funzione some() è molto lunga? – Fox

+1

@Fox: Penso che tu non capisca i termini usati da Laziy o operazioni a corto circuito. Se bool è falso, lua non valuterà alcunafunzione(), in nessuna delle due incarnazioni. – OllieB