Difference between revisions of "Lua"
(Created page with "=Comments= <syntaxhiglight lang=lua> -- Two dashes start a one-line comment. --[[ Adding two ['s and ]'s makes it a multi-line comment. --]] </syntaxhighlight> =V...") |
(No difference)
|
Revision as of 15:14, 2 June 2019
Contents
Comments
<syntaxhiglight lang=lua> -- Two dashes start a one-line comment.
--[[
Adding two ['s and ]'s makes it a multi-line comment.
--]]
</syntaxhighlight>
Variables
Numbers
num = 42 -- All numbers are doubles.
Strings
s = 'walternate' -- Immutable strings like Python. t = "double-quotes are also fine" u = [[ Double brackets
start and end multi-line strings.]]
Empty / Null
t = nil -- Undefines t; Lua has garbage collection.
-- If clauses: if num > 40 then
print('over 40')
elseif s ~= 'walternate' then -- ~= is not equals.
-- Equality check is == like Python; ok for strs. io.write('not over 40\n') -- Defaults to stdout.
else
-- Variables are global by default. thisIsGlobal = 5 -- Camel case is common.
-- How to make a variable local: local line = io.read() -- Reads next stdin line.
-- String concatenation uses the .. operator: print('Winter is coming, ' .. line)
end
-- Undefined variables return nil. -- This is not an error: foo = anUnknownVariable -- Now foo = nil.
aBoolValue = false
-- Only nil and false are falsy; 0 and are true! if not aBoolValue then print('twas false') end
-- 'or' and 'and' are short-circuited. -- This is similar to the a?b:c operator in C/js: ans = aBoolValue and 'yes' or 'no' --> 'no'
Loops
While
-- Blocks are denoted with keywords like do/end: while num < 50 do
num = num + 1 -- No ++ or += type operators.
end
For
karlSum = 0 for i = 1, 100 do -- The range includes both ends.
karlSum = karlSum + i
end
-- Use "100, 1, -1" as the range to count down: fredSum = 0 for j = 100, 1, -1 do fredSum = fredSum + j end
-- In general, the range is begin, end[, step].
Repeat / Do While
-- Another loop construct: repeat
print('the way of the future') num = num - 1
until num == 0
Functions
function fib(n)
if n < 2 then return 1 end return fib(n - 2) + fib(n - 1)
end
-- Closures and anonymous functions are ok: function adder(x)
-- The returned function is created when adder is -- called, and remembers the value of x: return function (y) return x + y end
end a1 = adder(9) a2 = adder(36) print(a1(16)) --> 25 print(a2(64)) --> 100
-- Returns, func calls, and assignments all work -- with lists that may be mismatched in length. -- Unmatched receivers are nil; -- unmatched senders are discarded.
x, y, z = 1, 2, 3, 4 -- Now x = 1, y = 2, z = 3, and 4 is thrown away.
function bar(a, b, c)
print(a, b, c) return 4, 8, 15, 16, 23, 42
end
x, y = bar('zaphod') --> prints "zaphod nil nil" -- Now x = 4, y = 8, values 15..42 are discarded.
-- Functions are first-class, may be local/global. -- These are the same: function f(x) return x * x end f = function (x) return x * x end
-- And so are these: local function g(x) return math.sin(x) end local g; g = function (x) return math.sin(x) end -- the 'local g' decl makes g-self-references ok.
-- Trig funcs work in radians, by the way.
-- Calls with one string param don't need parens: print 'hello' -- Works fine.