if (foo == nil or foo == '') then
foo = "some default value"
end
만약 foo 가 빈 문자열을 괜찼습니다 테스트하려면 목표는 조건이 모두 값이 없습니다.
이 경우 대신 간단한 코드를 테스트할 수 있는 한 두 개의?
>. 이 경우 대신 간단한 코드를 테스트할 수 있는 한 두 개의?
& # 39, & # 39 '모두' 와 ',' 서로 다른 값을 있다. 그냥 's' 는 괜찼습니다 테스트하려면 그 하는 경우, IMO 는 비교할 수 있기 때문에 가장 선택해제합니다 의도를 모두 합니다.
몇 가지 다른 점이 그 자체 생성된 바이트코드를:
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
두 번째는 차이가 있지만, 루아 5.1-5.2 (on my 실험기계가 어쨌든) 에서 가장 작은. # 39, d, s sake) 를 통해 첫 번째 i& 검색하기를 clarity& # 39.