local a = {}
local b = {}
local c,d = (a~=nil) and 1,1 or 0,0 -- prints "1 1"
local c,d = (a==nil) and 1,1 or 0,0 -- prints "false 1"
print(c,d)
나는 이런 일이 발생합니다. "0 0"을 인쇄하는 방법이 있습니까?루아 if 문 관용구
local a = {}
local b = {}
local c,d = (a~=nil) and 1,1 or 0,0 -- prints "1 1"
local c,d = (a==nil) and 1,1 or 0,0 -- prints "false 1"
print(c,d)
나는 이런 일이 발생합니다. "0 0"을 인쇄하는 방법이 있습니까?루아 if 문 관용구
"0 0"을 인쇄 할 수있는 방법이 있습니까?
아니요. 왜냐하면 and or
표현식은 항상 하나의 결과를 반환하기 때문에 표시되는 결과는 아마도 사용자가 생각하는 이유 때문 만은 아닙니다.
로컬 C, D = (A ~ = 닐)와 1,1- 또는 0,0 - 인쇄 "1"이이
((a~=nil) and 1),(1 or 0),0
로 계산
. 첫 번째 표현식은 1을 반환하고 두 번째 표현식 (1 or 0
)은 1을 반환하고 마지막 표현식은 무시됩니다 (왼쪽에 두 개의 변수가 있고 오른쪽에 세 개의 표현식이 있음).
로컬 C, D = (A == 전무) 및 1,1- 또는 0,0 - 인쇄 "FALSE 1"이이 유사한 방식으로 계산된다
, (a==nil)
는 제외이다 false
그래서 당신은 두 번째 결과를 얻습니다.
원하는대로하려면 두 개의 표현식 (하나는 c
이고 다른 하나는 d
)로 나눠야합니다.
으로 그의 마지막 문장에서 "폴 Kulchenko"지적, 난 당신이 정말 가장 컴팩트 한 방법으로 가능한이 작업을 수행하려면 두 개의 숙어 ...
local a = {}
local b = {}
local c,d = (a~=nil) and 1 or 0, (a~=nil) and 1 or 0 -- prints "1 1"
local c,d = (a==nil) and 1 or 0, (a==nil) and 1 or 0 -- prints "0 0"
print(c,d)
를 추가 결국, 당신은 만들 수 있습니다 그것을하는 함수. 일반적으로 조건 당 하나의 매개 변수 만 가져야하지만, 배수를 처리하는 매개 변수가 절대적으로 필요한 경우에는 두 가지 방법이 있습니다.
옵션 # 1 : 테이블을 가지고 : 분명히
function iff(cond, tbl1, tbl2)
if(cond) then
return unpack(tbl1)
else
return unpack(tbl2)
end
end
, 이것은 당신이 항상 테이블을 통과해야합니다. 단일 값만 필요하면 함수의 두 번째 버전이 필요합니다. 유형에 기반한 조건부 로직을 추가하는 것이 바람직하므로 코드가 느려집니다.
옵션 # 2 : 가변 인자 :
--Number of parameters ought to be even.
--The first half are returned if the condition is true,
--the second half if it is false.
function iff(cond, ...)
if(cond) then
return ... --Yes, you're returning all of them, but the user shouldn't be trying to take more than the first half.
else
return select((select("#", ...))/2, ...)
end
end
사용 if 문 경우? –
@Mooing Duck, 나는 "진술"이라고 싫어, 그들은 크고 추합니다. –
또한 코드에서와 같이 바보 같은 실수를 방지합니다. 압축 된 코드 또는 실제로 작동하는 코드를 사용 하시겠습니까? –