- UID
- 335199
- 主题
- 注册时间
- 2012-9-25
- 在线时间
- 小时
- 最后登录
- 1970-1-1
签到天数: 78 天 [LV.6]常住居民II
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?点击注册
x
本帖最后由 suixin812 于 2014-5-6 11:28 编辑
一般我们在Lua里要发送一个Bang指令时,通常使用SKIN对象的Bang()函数。例如设置一个Meter的选项并更新:- SKIN:Bang('!SetOption','Label','Text',s)
复制代码 有时候要写很多个Bang的时候会觉得这种写法格外麻烦,
虽然我们也可以把所有Bang一次性传递给Bang函数- SKIN:Bang('[!SetOption Label Text'..s..'][!Update]')
复制代码 但像这样需要传递Lua里变量的时候,这么写也很麻烦。
所以一般我们会声明一个简单的函数,来简化Bang函数:- function SetOpt(section,key,value)
- return SKIN:Bang('!SetOption', section, key, value)
- end
复制代码 但最近我发现另一种简化Bang写法的办法,我们可以直接在表MeterWindow里声明新的函数:
- function MeterWindow:SetOption(section,key,value)
- return self:Bang('!SetOption',section,key,value)
- end
复制代码 MeterWindow是SKIN对象的类,这样我们就可以这样使用Bang:- SKIN:SetOption('Label','Text',s)
复制代码 虽然字数变多了,但是好处是比之前的函数好记。
用之前的方法在全局声明一个新的函数,等过几天后回来很可能你就已经忘了SetOption改用什么函数。
另一个好处是,只要有一个这样声明了函数的一个lua被加载,那么Rainmeter中所有的lua都可以用SKIN:SetOption()的写法。
最后,下面这个函数声明了一些常用的Bang,只要在脚本加载时执行一下就可以了
- --简化SKIN:Bang的写法
- function SimplyBangs()
- local bangs = {
- 'SetOption',
- 'SetVariable',
- 'CommandMeasure',
- 'Redraw',
- 'Update',
- 'UpdateMeter',
- 'UpdateMeasure',
- 'EnableMeasure',
- 'DisableMeasure',
- 'MoveMeter',
- 'HideMeter',
- 'ShowMeter',
- 'Log'
- }
-
- for _, b in pairs(bangs) do
- MeterWindow[b] = MeterWindow[b] or function(self, ...)
- return MeterWindow.Bang(self,'!'..b,unpack(arg))
- end
- end
- end
复制代码 |
|