# conditional – Inline conditions in Lua (a == b ? yes : no)?

## conditional – Inline conditions in Lua (a == b ? yes : no)?

Sure:

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

If the `a and t or f` doesnt work for you, you can always just create a function:

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

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

of course, then you have the draw back that T and F are always evaluated….
to get around that you need to provide functions to your ternary function, and that can get unwieldy:

``````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))
``````

#### conditional – Inline conditions in Lua (a == b ? yes : no)?

Although this question is fairly very old, I thought it would be fair to suggest another alternative that syntactically appears very similar to that of the ternary operator.

``````function register(...)
local args = {...}
for i = 1, select(#, ...) do
debug.setmetatable(args[i], {
__call = function(condition, valueOnTrue, valueOnFalse)
if condition then
return valueOnTrue
else
return valueOnFalse
end
end
})
end
end

-- Register the required types (nil, boolean, number, string)
register(nil, true, 0, )
``````

And then use it like this:

``````print((true)  (false, true)) -- Prints false
print((false) (false, true)) -- Prints true
print((nil)   (true, false)) -- Prints false
print((0)     (true, false)) -- Prints true
print(()    (true, false)) -- Prints true
``````

Note: For tables, however, you cannot use them directly with the above method. This is because each and every table has its own independent metatable and Lua does not allow you to modify all tables at once.

In our case, an easy solution would be to convert the table into a boolean using the `not not` trick:

``````print((not not {}) (true, false)) -- Prints true
``````