Lua 备忘清单

包含最重要概念、函数、方法等的 Lua 备忘单。 初学者的完整快速参考。

入门

下载

macos 使用 homebrew 下载

$ brew install lua

其它下载方式

# 查看 lua 是否安装成功
$ lua -v

hello world

#!/usr/bin/env lua

print("Hello World!")

运行

$ lua ./hello.lua
# 或者也可以像 bash 脚本一样
$ chmod +x hello.lua
./hello.lua

注释

单行注释

-- 以两个减号开始

多行注释

多行注释以 --[[ 开头, 以 ]] 结尾

--[[

]]

type() 函数

使用 type() 函数可以判断变量或者值的类型

print(type(true)) -- boolean
print(type(nil)) -- nil

number

Lua 默认只有一种 number 类型 double (双精度) 类型

print(10)
print(0.3)
print(2e + 10)

string

-- 使用 ''
local str1 = 'str1'
-- 使用 ""
local str2 = "str2"

[[]]

使用 [[]] 跨行表示多个字符串

local html = [[
<html>
<head></head>
<body>
    <a href="https://www.twle.cn/">简单编程</a>
</body>
</html>
]]
print(html)

字符串连接(..)

print("a" .. 'b')
-- ab
print(157 .. 428)
-- 157428

字符串长度(#)

print(#"string") -- 6

table

local table = {}

迭代 table

默认的初始索引会从 1 开始

local array = { "apple", "pear", "orange", "grape" }

print(array[1]) -- apple

for k, v in pairs(array) do
  print(k .. " : " .. v)
end
-- 1 : apple
-- 2 : pear
-- 3 : orange
-- 4 : grape

指定键

local array = {}
array.one = "apple"
array["two"] = "peach"

print(array.one) -- apple
print(array.two) -- peach

变量

默认值

变量的默认值均是 nil

#!/usr/bin/env lua
print(b) -- nil

全局和局部变量

Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量

#!/usr/bin/env lua
function main()
  local b = 12
  a = 23
end

main()
print(a) -- 23
print(b) -- nil

赋值

a = "hello " .. "world" -- 改变 变量
t.n = t.n + 1  -- 改变 table

-- 给多个变量赋值
a, b = 10, 2*a  --> a=10; b=20

交换变量

local x, y = 1, 3
x, y = y, x

print(x, y) -- 3, 1

local tab = {}
tab.one = 2
tab.two = 1

tab["one"], tab["two"] = tab.two, tab.one

print(tab.one, tab.two) -- 1    2

赋值个数不一致

  • 如果变量个数大于值的个数,按变量个数补足 nil

    a, b, c = 1, 3
    print(a,b,c)      --> 1   3   nil
    
  • 如果变量个数小于值的个数,多余的值会被忽略

    a = 1
    local a, b = a, a + 1, a + 2
    print(a, b) --> 1   2
    

运算符

:-:-
+加法
-减法
*乘法
/除法
%取余,求出除法的余数
^乘幂,计算次方
-负号,取负值
local a, b = 4, 3

print(a + b) -- 7
print(a - b) -- 1
print(a / b) -- 1.3333333333333
print(a * b) -- 12
print(a % b) -- 1
print(a ^ b) -- 64.0

类型转换

  • 在算术运算中,string 类型会尝试自动转换为 number 时

    local a, b, c = "str", "1", "2"
    
    -- print(a + b) -- error
    print(b + c) -- 3
    
  • number 类型使用 .. 会自动转换为 string

    local a, b = 1, 2
    print(type(a .. b))
    
  • 其它方式的转换

    print(type(tostring(12))) -- string
    print(type(tonumber("12"))) -- number
    

条件语句

运算符

关系运算符

符号含义
==等于
~=不等于
>大于
<小于
>=大于等于
<=小于等于
local a, b = 4, 3

print(a < b) -- false
print(a <= b) -- false
print(a == b) -- false
print(a ~= b) -- true
print(a > b) -- true
print(a >= b)-- true

逻辑运算符

符号含义
and逻辑与
or逻辑或操作符
not逻辑非操作符
local a, b = true, false
print(a and b) -- false
print(a and not b) -- true
print(a or b) -- true

while 循环

local num = 1
while (num < 5) do
  print("num 的值为:", num)
  num = num + 1
end

if 语句

if(0)
then
    print("0 为 true")
end

if .. elseif() .. else

local age = 27;

if (age < 18)
then
  print("age 小于 18")
elseif (age < 25)
then
  print("age 小于 25")
elseif (age < 30)
then
  print("age 小于 30")
else
  print("age 大于 30")
end

print("age 的值为 :", age)

注意: Lua0true,但是 Lua 中的 nil 可以当作 false

for 循环

for i = 10, 1, -1 do
  print(i)
end
  • lua 中的 for 循环从参数 1 变化到参数 2,每次变化以参数 3 为步长递增 i,并执行一次表达式
  • 参数三,是可选的,如果不指定,默认是 1
  • 参数二只会在一开始求值,其后不会再进行运算
local f = function(x)
  print("in f(x) ")
  return x * 2
end

for i = 1, f(5) do
  print(i)
end

repeat...until 循环

local num = 11
repeat
  print("num 的值为: ", num)
  num = num + 1
until (num > 10)
-- num 的值为:11

repeat...until 循环的条件语句在当前循环结束后判断

break

local num = 11
repeat
  print("num 的值为: ", num)
  num = num + 1
  if (num > 15) then
    break
  end
until (num > 20)

另见