1. Lua 基础语法
最好的书籍 《Programming in Lua》
语法测试网站:http://www.lua.org/demo.html
其它书籍:
http://astore.amazon.com/lua-store-20
https://store.feistyduck.com/
输出语句
print "Hello from Lua!" -- 不带括号
print("Hello from Lua!") -- 带括号,两者等价
或者
io.write("hehe")
注意,io.write()是不会换行的,可以使用print()来实现换行。
-- 中间使用逗号,输出时两变量之间会有一个 tab 隔开
print(a, b)
-- 字符串格式转换
print(string.format(123))
-- 使用 [[ ]] 多行字符串,中间的字符串不需要加双引号""
print(
[[
hello
world
]])
Lua 的常识
Lua 代码是可以直接运行的。对,不需要 main 函数。
Lua 导入文件 require
搜索目录加载文件,并判断是否文件已经加载,避免重复加载同一文件。
其中,“.lua” 可以省略。
require "hello.lua"
require("hello2")
require "hello3"
Lua 数据类型
- 定义一个变量的时候,不需要写数据类型
- 数据类型
nil 空,a = nil 相当于删除
boolean 布尔
number 数值 12, 12.34
string 字符串
table 表类型
function 函数
userdata 自定义数据
thread 线程
注释
- 单行注释使用“–”即可:
-- 单行注释
- [[多行注释以“–[[”开始,以“–]]”结束]]:
--[[
代码块
--]]
取消多行注释:
---[[
--]]
变量
变量名
- 变量名由字母、数字、下划线构成
- 不以数字开头
- 在Lua中以下划线"_“开始的参数命名通常代表特殊的值,如(”_VERSION"),所以尽量不要使用以下划线开始命名。
print(_VERSION)
- 变量名不能与关键字相同,Lua 关键字如下:
nil
local
true, false
and, or, not
if, else, elseif, then
for, while, do, break, in
repeat, return, until
function, end
变量规则
- 在Lua中所有的变量和关键字都是大小写敏感的
- 变量有值的时候才有类型,否则变量本身是无类型的
a=1
b="abc"
c={}
d=print
print(type(a))
print(type(b))
print(type(c))
print(type(d))
输出
number
string
table
function
变量作用域
在 Lua 中,默认声明的变量为全局变量,以 local 为修饰符的为局部变量,局部变量只在所属的语句块内有效。
变量赋值
- 可以一对多个变量赋值。
规则:如果等号(“=”)右边多了,则舍弃,左边多了,则赋值为空(nil)
a, b, c, d, e = 1, 2, "three", "four", 5
print(a,b,c,d,e)
- 表达式 a,b=b,a 表示a和b的值交换。
注:类型不一样照样可以交换。
-- 会先计算右边所有的值,然后再执行赋值操作
a, b = 10, 2*x -- a = 10; b = 2*x
-- 变量个数和值的个数不一致
-- 1,变量个数大于值的个数:自动补 nil
-- 2. 变量个数小于值的个数:忽略多余的值
a, b = 10 -- a = 10, b= nil
a = 10, 20 -- a = 10, 多余的 20 被忽略
代码块
-- 代码块 do end
do
local a = 10 -- a 为局部变量,仅在代码块中有效
print(a) -- 输出 10
end
print(a) -- 输出 nil
特别总结
- 语句末尾不需要加分号
;
- 语句块不是用花括号
{}
, 而是do
语句块end
表示语句块的开始和结束。花括号{}
表示的为一个表结构 - 运算符
^
:表示幂运算。(即2^10 = 1024
) - 不等于号为:
~=
- 变量的定义不需要加数据类型,直接
a = 10
。 - 且(
and
)、或(or
)的运算返回值不是true/false
。而是运算符左边或右边的变量值。 - 除了
nil
、false
为假,其余的均为真。(0
和 空串""
也为真)。 - 变量的赋值可以多个一起赋值。(
a,b,c = 10,20,30
)。 - 函数可以返回多个值。(
return a,b,c
) - Lua 中数据结构类型只有唯一的一个:表(table)。它既可以表示一个数组,也可以是一个数据结构,或者是一个类。
- 数组下标从
1
开始,而不是0
。