Lua의 인라인 조건 (a == b?“yes”:“no”)?


88

어쨌든 Lua에서 인라인 조건을 사용할 수 있습니까?

예 :

print("blah: " .. (a == true ? "blah" : "nahblah"))

1
문제 설명 및 여러 솔루션과 함께 삼항 연산자에 대한 lua-users 위키 에 대한 멋진 기사가 있습니다.
Marcin 2013 년

답변:


120

확실한:

print("blah: " .. (a and "blah" or "nahblah"))

31
답변에 +1. 그러나 나는 이것이 엄격하게 사실이라고 생각하지 않는다. 나는 LUA를 사용하지 않는다. 그러나 나는 이것이 다른 언어의 삼항 연산자에 비해이 접근법과 "결함"을 공유한다고 생각한다. 상상 : (cond and false-value or x)을 초래할 것이라는 점을 x모든 경우입니다.

1
A의 값도 인쇄되지 않습니까?
corsiKa 2011

11
@glowcoder 아니요. "접속 연산자 (and)는이 값이 false 또는 nil이면 첫 번째 인수를 반환하고, 그렇지 않으면 두 번째 인수를 반환합니다. 분리 연산자 (또는)는이 값이 nil 및 false와 다른 경우 첫 번째 인수를 반환합니다. ; 그렇지 않으면 두 번째 인수를 반환합니다. and 및 또는 바로 가기 평가를 사용합니다. 즉, 두 번째 피연산자는 필요한 경우에만 평가됩니다. " -lua.org/manual/5.0/manual.html에서

3
@pst는 의도가 a and false or true똑같은 대답을주지 않는 경우 정확합니다 not a. 이 관용구는 일반적으로 atrue 인 경우 원하는 값 이 false또는 일 수없는 경우에 사용 nil됩니다.
RBerteig 2011

1
이 양식을 변수와 함께 사용하는 경우 두 번째 변수가 거짓이 아니라고 가정 할 수 있으므로 a and assert(b) or c.
HoverHell

29

이 기능이 a and t or f작동하지 않으면 언제든지 함수를 만들 수 있습니다.

function ternary ( cond , T , F )
    if cond then return T else return F end
end

print("blah: " .. ternary(a == true ,"blah" ,"nahblah"))

물론, T와 F가 항상 평가된다는 단점이 있습니다.

function ternary ( cond , T , F , ...)
    if cond then return T(...) else return F(...) end
end

print("blah: " .. ternary(a == true ,function() return "blah" end ,function() return "nahblah" end))

나는 이것이 부울 변수에 가장 유용하다고 생각합니다
Vyacheslav

이 답변은 부울에서도 작동하기 때문에 실제로 상위 답변보다 낫습니다.
Деян Добромиров

이 솔루션이 수용 할 수있는보다 일반적인 경우 tnil.
NetherGranite
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.