Controlla se una stringa non è nullo o vuota in Lua


Answers

Questo codice può essere semplificato in uno se test invece due?

nil e '' sono valori diversi. Se hai bisogno di testare che s è nessuno dei due, IMO dovresti solo fare un confronto con entrambi, perché rende più chiaro il tuo intento.

Quella e alcune alternative, con il loro codice by generato:

if not foo or foo == '' then end
     GETGLOBAL       0 -1    ; foo
     TEST            0 0 0
     JMP             3       ; to 7
     GETGLOBAL       0 -1    ; foo
     EQ              0 0 -2  ; - ""
     JMP             0       ; to 7

if foo == nil or foo == '' then end
    GETGLOBAL       0 -1    ; foo
    EQ              1 0 -2  ; - nil
    JMP             3       ; to 7
    GETGLOBAL       0 -1    ; foo
    EQ              0 0 -3  ; - ""
    JMP             0       ; to 7

if (foo or '') == '' then end
   GETGLOBAL       0 -1    ; foo
   TEST            0 0 1
   JMP             1       ; to 5
   LOADK           0 -2    ; ""
   EQ              0 0 -2  ; - ""
   JMP             0       ; to 7

Il secondo è il più veloce in Lua 5.1 e 5.2 (sulla mia macchina comunque), ma la differenza è minima. Vorrei andare con il primo per chiarezza.

Question

Ho attualmente alcuni codici Lua usando la seguente sintassi:

if (foo == nil or foo == '') then
    foo = "some default value"
end

L'obiettivo della condizione if è testare foo non è né una stringa vuota, né un valore nullo.

Questo codice può essere semplificato in uno se test invece due?