Garry's Mod Wiki

Either

  any Either( any condition, any truevar, any falsevar )

Description

An eagerly evaluated ternary operator, or, in layman's terms, a compact "if then else" statement.

In most cases, you should just use Lua's "pseudo" ternary operator, like this:

local myCondition = true local consequent = "myCondition is true" local alternative = "myCondition is false" print(myCondition and consequent or alternative)

In the above example, due to short-circuit evaluation, consequent would be "skipped" and ignored (not evaluated) by Lua due to myCondition being true, and only alternative would be evaluated. However, when using Either, both consequent and alternative would be evaluated. A practical example of this can be found at the bottom of the page.

Falsey values

If consequent is "falsey" (Lua considers both false and nil as false), this will not work. For example:

local X = true local Y = false local Z = "myCondition is false" print(X and Y or Z)

This will actually print the value of Z.

In the above case, and other very rare cases, you may find Either useful.

Arguments

1 any condition
The condition to check if true or false.
2 any truevar
If the condition isn't nil/false, returns this value.
3 any falsevar
If the condition is nil/false, returns this value.

Returns

1 any
The result.

Example

The following two print statements have identical results.

local ply = Entity( 1 ) print( "Player " .. Either( ply:IsAdmin(), "is", "is not" ) .. " an admin" ) print( "Player " .. ( ply:IsAdmin() and "is" or "is not" ) .. " an admin" )
Output: If Player 1 is admin, it will print "Player is an admin".

Example

A practical example of the behavior of this function in comparison to Lua's "pseudo" ternary operator, demonstrating short-circuit evaluation, and the lack of it when using Either.

local function printHello() print( "Hello, world!" ) return "printHello called" end local myCondition = true print( myCondition and "printHello not called" or printHello() ) print( Either( myCondition, "myCondition is true, but printHello was still called", printHello() ) )
Output:
printHello not called Hello, world! myCondition is true, but printHello was still called