Lua/Expressions

From Wikiversity
< Lua
Jump to navigation Jump to search

Lua modules based on the Scribunto/Lua extension are stored in resource pages using the Module: namespace. Each module uses a table to hold functions and variables, and that containing table is returned at the end of the module code.[1] Expressions are comprised of literal values, variables, and arithmetic, relational and logical operators. This lesson will show you how to use expressions in your scripts.

Prerequisites[edit]

This lesson assumes you have already completed the Variables lesson.

Create a Lua Script with Expressions[edit]

To create a Lua script with expressions:

  1. Navigate to Module:Sandbox.
  2. Clear all existing code.
    It's a sandbox. Everyone is free to play in the sandbox. But if you find another user is actively editing the sandbox at the same time, you may also use Module:Sandbox/Username, where Username is your Wikiversity username.
  3. Add the following code and save the page:
local p = {}
 
function p.arithmetic()
    local a = 3
    local b = 2
    local result
 
    result = ';Arithmetic\n'
    result = result .. ':a is ' .. a .. '\n'
    result = result .. ':b is ' .. b .. '\n'
    result = result .. ':a + b is ' .. a + b .. '\n'
    result = result .. ':a - b is ' .. a - b .. '\n'
    result = result .. ':a * b is ' .. a * b .. '\n'
    result = result .. ':a / b is ' .. a / b .. '\n'
    result = result .. ':a % b is ' .. a % b .. '\n'
    result = result .. ':a ^ b is ' .. a ^ b .. '\n'
    result = result .. ':-a is ' .. -a .. '\n'
 
    return result
end
 
function p.relational()
    local a = 3
    local b = 2
    local result
 
    result = ';Relational\n'
    result = result .. ':a is ' .. a .. '\n'
    result = result .. ':b is ' .. b .. '\n'
    result = result .. ':a == b is ' .. tostring(a == b) .. '\n'
    result = result .. ':a ~= b is ' .. tostring(a ~= b) .. '\n'
    result = result .. ':a < b is ' .. tostring(a < b) .. '\n'
    result = result .. ':a > b is ' .. tostring(a > b) .. '\n'
    result = result .. ':a <= b is ' .. tostring(a <= b) .. '\n'
    result = result .. ':a >= b is ' .. tostring(a >= b) .. '\n'
 
    return result
end
 
function p.logical()
    local a = 3
    local b = 2
    local result
 
    result = ';Logical\n'
    result = result .. ':a is ' .. a .. '\n'
    result = result .. ':b is ' .. b .. '\n'
    result = result .. ':a < b and b < a is ' .. tostring(a < b and b < a) .. '\n'
    result = result .. ':a < b or b < a is ' .. tostring(a < b or b < a) .. '\n'
    result = result .. ':a < b is ' .. tostring(a < b) .. '\n'
    result = result .. ':not (a < b) is ' .. tostring(not (a < b)) .. '\n'
 
    return result
end
 
function p.length()
    local string = 'This is a string'
    local result
 
    result = ';Length\n'
    result = result .. ':The length of "' .. string .. '" is ' .. #string
 
    return result
end
 
return p

Test Your Lua Script[edit]

To test your Lua script:

  1. Navigate to either the Module_talk:Sandbox page, the Wikiversity:Sandbox page, or your own user or sandbox page.
  2. Add the following code and save the page:
{{#invoke:Sandbox|arithmetic}}
{{#invoke:Sandbox|relational}}
{{#invoke:Sandbox|logical}}
{{#invoke:Sandbox|length}}

The result should be:

Arithmetic
a is 3
b is 2
a + b is 5
a - b is 1
a * b is 6
a / b is 1.5
a % b is 1
a ^ b is 9
-a is -3
Relational
a is 3
b is 2
a == b is false
a ~= b is true
a < b is false
a > b is true
a <= b is false
a >= b is true
Logical
a is 3
b is 2
a < b and b < a is false
a < b or b < a is true
a < b is false
not (a < b) is true
Length
The length of "This is a string" is 16

Understand Your Lua Script[edit]

To understand your Lua script:

  1. local and the following code defines the variables a, b, and result. a and b are initialized. result is nil.
  2. 3 and 2 are numeric literals.
  3. ';Arithmetic\n' is a string literal. String literals may also be defined using double quotes, such as ";Arithmetic\n".
  4. \n is a newline character. Content that follows will appear on a new line in the resulting text.
  5. .. is the concatenation operator. It appends two strings together. Numeric values are automatically converted to strings when concatenated.
  6. +, -, *, and / are add, subtract, multiply, and divide, respectively.
  7. % is the modulo or remainder operator.
  8. ^ is the exponentiation or 'raise to the power of' operator.
  9. - preceding a variable is the negation operator.
  10. == compares for equality.
  11. ~= compares for inequality.
  12. <, >, <=, and >= compare less than, greater than, less than or equal, and greater than or equal, respectively.
  13. tostring() explicitly converts the content to a string. Logical comparisons do not automatically convert to strings.
  14. and returns false if the left operand is false, or the value of the right operand if the left operand is true.
    This left/right approach is more efficient, because and stops evaluating as soon as it knows the result is false.
  15. or returns true if the left operand is true, or the value of the right operand if the left operand is false.
    This left/right approach is more efficient, because or stops evaluating as soon as it knows the result is true.
  16. not returns the true/false opposite of what follows.
  17. # returns the length of the variable that follows.

Conclusion[edit]

Congratulations! You've now created, tested, and understood a Lua script with expressions. Continue on to the Conditions lesson.

See Also[edit]

References[edit]