本文发布于 1239 天前。
冒号自引用
冒号操作会带入一个self
参数,用来代表自己。而点号操作,只是内容的展开。
sub函数用法可参考string.sub
local str = "abcde"
print("case 1:", str:sub(1, 2))
print("case 2:", str.sub(str, 1, 2))
>Output
case 1: ab
case 2: ab
在函数定义时,使用冒号将默认接收一个self
参数,而使用点号则需要显式传入self
参数。
例如
点号调用
girl = {money = 200}
function girl.goToMarket(girl ,someMoney)
girl.money = girl.money - someMoney
end
girl.goToMarket(girl ,100)
print(girl.money)
引用参数self
girl = {money = 200}
function girl.goToMarket(self ,someMoney)
self.money = self.money - someMoney
end
girl.goToMarket(girl ,100)
print(girl.money)
使用冒号调用
girl = {money = 200}
function girl:goToMarket(someMoney)
self.money = self.money - someMoney
end
girl:goToMarket(100)
print(girl.money)
实际上,冒号的定义省略(或直接隐含定义)了第一个传入参数self。
即,如官方文档,
function t.a.b.c:f(params)
body
end
is syntactic for
t.a.b.c.f = function (self, params)
body
end
Lua gsub函数
需要注意的是,gsub
函数与sub
函数完全不同。
string.gsub(mainString,findString,replaceString,num)
在字符串中替换。
mainString
为要操作的字符串,findString
为被替换的字符,replaceString
要替换的字符,num
替换次数(可以忽略,则全部替换),例如。
txt="abcde"
print(txt:gsub("c","1"))
此处用了
:
来实现自引用。
Aegisub unicode.len函数
length = unicode.len(instring)
以代码点为单位判断所给UTF-8编码的字符串的长度。
在Aegisub中使用时,应写
_G.unicode.len(string)
例如:计算段落字符数 和 去标签后的字符数(都去掉了空格)
Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,code line,aa = _G.unicode.len(orgline.text:gsub(" ","")) bb = _G.unicode.len(orgline.text_stripped:gsub(" ",""))
Comment: 0,0:00:00.00,0:00:00.00,Default,,0,0,0,template noblank,!aa! !bb!
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,karaoke,{\k1}这是一 句测试
Dialogue: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,fx,11 6这是一 句测试
Lua 构建Function
可以参考关于简单lua语句的摘记
计数器代码
参考了未知作者的关于retime函数的介绍中的内容
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,code once,function char_counter(ref) ci[1] = ci[1] + 1; return "" end
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,code line,ci = {0}; cn = _G.unicode.len(orgline.text_stripped:gsub(" ",""))
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,template char,!char_counter(1)! si=!$si! ci=!ci[1]!
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,karaoke,{\k1}无法{\k1}忘abc{\k1}记{\k1}你{\k1}的{\k1}声{\k1}音
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,karaoke,{\k1}眼{\k1}泪{\k1}也{\k1}无{\k1}法{\k1}忘{\k1}记
简化版
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,code line,ci=0
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,code once,function countc() ci=ci+1 return ""end
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,template char,!countc()!ci=!ci! si=!$si!
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,karaoke,{\k1}你{\k1}的声{\k1}音不{\k1}能{\k1}忘{\k1}记
Comment: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,karaoke,泪水也无法忘记
Reference
[1]https://blog.csdn.net/xiejunna/article/details/52143470
[2]https://www.w3cschool.cn/lua/o23m1te6.html
[3]https://www.runoob.com/lua/lua-strings.html