本文发布于 1393 天前。
Lua基础语法
注释
-- this is one line comment
--[[
this is a comment
and comment again
and again
]]
变量
var_string = "foo and bar"; --用""表示string
print(var_string);
→
foo and bar
当遇到限定符号,例如"
,则打反斜杠(类似正则表达)
var_string = "foo and \" \\ bar";
print(var_string);
→
foo and " \ bar
大小写转换
string.upper
string.lower
var_string = string.upper('foo');
print(var_string);
→
FOO
连接符
'foo'.."and"..[[bar]]
→
foo and bar
在Aegisub中用table
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,code once,test_var = {"one", 2,3,4,5}
Comment: 0,0:00:05.00,0:00:07.00,Default,,0,0,0,template syl,!test_var[1]!
Comment: 0,0:00:07.00,0:00:09.00,Default,,0,0,0,karaoke,
↓
Dialogue: 0,0:00:07.00,0:00:09.00,Default,,0,0,0,fx,one
---
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,code once,test_var = {foo="two", 2,3,4,5}
Comment: 0,0:00:05.00,0:00:07.00,Default,,0,0,0,template syl,!test_var.foo!
Comment: 0,0:00:07.00,0:00:09.00,Default,,0,0,0,karaoke,
↓
Dialogue: 0,0:00:07.00,0:00:09.00,Default,,0,0,0,fx,two
## print方法
> print("aa");
aa
注释
两个横杠
--print("aa");
可以按control + / 来快速切换
定义全局变量
> num = 100
> print(num)
100
定义局部(方法内部、文件内部)变量
local num = 100
定义方法/函数
function sayhello()
print("hello lua functions")
end
sayhello()
→
hello lua functions
定义有传入传出参数的方法 条件语句
function max(a,b)
if a>b then
print(a)
else
print(b)
end
end
max(2,7)
→
7
也可以用return方法
function max(a,b)
if a>b then
return(a)
else
return(b)
end
end
print(max(2,1))
→
2
For循环
for var=init, end(, step) do
**
end
E.g:
for i = 3, 1, -1 do
print(i)
end
→
3
2
1
表
config = {} --创建空的表
config.words = "hello" --元素
config.num = "100"
config["name"]="zhang san" --键
print(config["words"]) --键
print(config.name) --元素
→
hello
zhang san
也可以在大括号内直接定义:
config={alpha="AA",beta="BB"}
print(config.alpha)
print(config["beta"])
→
AA
BB
遍历表
for key, var in pairs(table) do --table为表的名字
**
end
例如:
config={alpha="AA",beta="BB"}
for key, var in pairs(config) do
print(key,var)
end
→
alpha AA
beta BB
此外,用#tablename
可以获取表的元素数
数组
lua没有数组的概念,通常用表来完成
arr = {1,2,3,"hellp"} --定义初始值
for key, var in pairs(arr) do --循环打印数组
print(key,var)
end
→
1 1
2 2
3 3
4 hellp
可以理解为:左边为数组索引,右边为数组的内容
另,lua的索引是从1开始的,而非0.
Table.insert
arr = {1,2,3} --定义初始值
table.insert(arr,2,"foo")---在arr数组的第2个位置插入了“foo”
for key, var in pairs(arr) do --循环打印数组
print(key,var)
end
→
1 1
2 foo
3 2
4 3
生成一个倒序数列:
arr = {} --定义初始值
for var=1, 5 do --每次循环都在第一个位置插入数值
table.insert(arr,1,var)
end
for key, var in pairs(arr) do --循环打印数组
print(key,var)
end
→
1 5
2 4
3 3
4 2
5 1
泛型For循环
泛型 for 循环通过一个迭代器函数来遍历所有值,类似 java 中的 foreach 语句。[1]
Lua 编程语言中泛型 for 循环语法格式:[2]
--打印数组a的所有值
a = {"one", "two", "three"}
for i, v in ipairs(a) do
print(i, v)
end
>
1 one
2 two
3 three
a = {"one", "two", "three"}
for i, v in ipairs(a) do
print("table["..i.."]="..v)
end
>
table[1]=one
table[2]=two
table[3]=three
i是数组索引值(下标),v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。i和v均可以是自定的变量名。
用枚举型For做一个表元素统计器
枚举型For可以计算下标不连续的table元素个数,因为如果下标是字符串,就不能用#来计算table长度。
function getLength(tab)
local n=0
for i,v in pairs(tab) do
n=n+1
end
return n
end
fruit={a="123",b="abc",c="df8"}
print(getLength(fruit))
>
3
迭代器
pairs
实质上是一个迭代器。迭代器本身就是一个函数(迭代器函数),其内部还存在一个执行迭代的函数(迭代函数)。
迭代器能够遍历某些集合中的部分或者全部元素,每次调用迭代器函数时,返回集合的下一个元素。
泛型For实际上的格式为:
for 变量列表 in 迭代器 do
语句块
end
编写一个迭代器
function iterator (tbl)
local index = 0
local count = #tbl
return function()
index = index + 1
if index <= count
then
return index,tbl[index] -- 返回值为元素数量组的数/字符串对
end
end
end
ooo={"asdf","1231","ds3"}
for i,v in iterator(ooo) do
print(i.." "..v)
end
>
1 asdf
2 1231
3 ds3
Break
在循环中,用break
退出当前嵌套层。