Lua For Aegisub

——For Aegisub——

-- 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

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("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 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
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.
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
function clone(tab)                     --拷贝一个表,tab 为输入量
    local ins = {}                      --定义了一个局部表 ins
    for key, var in pairs(tab) do       --将输入的 tab 表的值复制到对应 ins 表的值
        ins[key]=var
    end
    return ins                          --返回值为 ins 表
end

people ={}                              --新建一个类 people

people.sayHi= function()                --people 类的方法 sayHi
    print("what a nice day")
end

-- function people.sayHi()                  --另一种设置类方法的方式
--     print("what a nice day")
-- end

local  p = clone(people)                --用 clone 方法,把 people 表复制到了 p 表
p.sayHi()                               --用一个实例执行了 sayHi


→

what a nice day

如果不用实例的思想,则可以简单写为:


people ={}                              --新建一个类 people

people.sayHi= function()                --people 类的方法 sayHi
    print("what a nice day")
end

people.sayHi()

→

what a nice day
function clone(tab)                     --拷贝一个表,tab 为输入量
    local ins = {}                      --定义了一个局部表 ins
    for key, var in pairs(tab) do       --将输入的 tab 表的值复制到对应 ins 表的值
        ins[key]=var
    end
    return ins                          --返回值为 ins 表
end

function copy(dist,tab)
    for key, var in pairs(tab)do
        dist[key]=var
    end
end

people ={}                              --新建一个类 people

people.sayHi= function(self)                --people 类的方法 sayHi
    print("People say hi:"..self.name)
end

-- function people.sayHi()                  --另一种设置类方法的方式
--     print("what a nice day")
-- end

people.new=function(name)
    local self = clone(people)
    self.name = name
    return self
end
-- local  p = clone(people)                --用 clone 方法,把 people 表复制到了 p 表
-- p.sayHi()

local p = people.new("Zhangsan")
p.sayHi(p)                                 -- p:sayHi() 是一种更简单的写法

man ={}
man.new = function(name)
    local self=people.new(name)
    copy(self,man)
    return self
end

man.sayHello = function ()
    print("man say hello")
end

local m=man.new("Lisi")
m:sayHi() --m:sayHello

发表评论