<h2 id="comment">注釋</h2>
-- 單行注釋
--[[
多行注釋
--]]
<h2 id="value_type">值和類型</h2>
nil
- 未初始化的變量值為 nil
- nil 只與自己相等
boolean
true / false
number
- 不區分整型和浮點型
- 0 被判定為真
-
tostring(number)
方法用于將數字轉化為字符串
string
- 單雙引號都可以用于聲明字符串
'hello'
"haloo"
- 兩對中括號可以用于聲明多行字符串
[[多行字符串]]
-
..
是字符串鏈接符,不同與其他語言+
作為單純的算數運算符。 - 轉義字符串未完成
local mutiString = [[
111
223123
]]
print('10' + 1) -- number: 11
print(10 .. 22) -- string: '1022'
function
lua中函數是第一類值,可以存儲到變量中,也何以作為函數的返回值
UserData
later
Thread
later
<h2 id="operator">運算符</h2>
算數運算符
- 二元運算符:
+
,-
,*
,/
,^
,%
加,減,乘,除,冪,模 - 一元運算符:
-
負
關系運算符
<
>
<=
>=
==
~=
- 關系運算符返回 boolean 類型(true/false)
- == 比較地址, ~= 比較值
邏輯運算符
and
, or
, not
用法對應其他語言的 &&
, ||
, !
,and 優先級高于 or
-- 1. 三元運算
a and b or c
-- 2. 判斷真
func1 and func1() -- func1 不為假執行
x = x or y
-- 等于
if not x then
x = y
end
運算符優先級
level | - |
---|---|
1 | ^ |
2 |
not - (unary 一元) |
3 |
* /
|
4 |
+ -
|
5 | .. |
6 |
< > <= >= ~= ==
|
7 | and |
8 | or |
除了^
和..
外所有的二元運算符都是左連接的。
<h2 id="table">表 table</h2>
1. 創建
-- 類數組
days = {
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"
}
-- 類對象
pet = { name = "Misha", age = 12 }
-- 混合
foo = {
date = "2017-07-19",
worklist = { "lua", "csharp" },
pet = pet
}
ps:
- 數組風格是對象風格的特例
{"red", "green", "blue"}
-- 相當于
{[1] = "red", [2] = "green", [3] = "blue"}
- 數組風格下標從1開始,可以規定從0開始,但很多標準庫不能使用
{[0] = "red", "green", "blue"}
- 在構造函數的最后的"
,
"是可選的,可以方便以后的擴展。
{"red", "green", "blue",}
- 在構造函數中域分隔符逗號(",")也可以用分號(";")替代。
2. 讀取
foo.data -- string: '2017-07-19'
foo.worklist[1] -- string: 'lua' 注意:下標從1開始
foo.pet.age -- number: 12
3. 修改
foo.data -- string: '2017-07-19'
foo.data = 20170719
foo.data -- number: 20170719
4. 刪除
賦值為 nil
<h2 id="assignment">賦值</h2>
- 多變量賦值
a, b = 10, 2 * x
-- a: 10, b: 2 * x
a, b, c = 0
-- a: 0, b: nil, c: nil
a, b, c = 3, 4, 5, 6
-- a: 3, b: 4, c: 5; 6被忽略
function f ()
return 10, 20
end
a, b = f()
- 交換賦值
x, y = y, x
a[i], a[j] = a[j], a[i]
- 值的個數與變量個數不一致遵循:
- 變量個數 > 值的個數:按變量個數補足 nil
- 變量個數 < 值的個數: 多余的值會被忽略
require
模塊中聲明為 local,并 return
的變量。在其他模塊中引用時使用 local foo = require 'foo'
模塊中聲明的全局變量,只要被其他任意一個模塊引用時,即載入到 _G中,別的模塊即可任意調用