suixin812 发表于 2014-4-3 09:17:02

【Lua Snippet】简化Bang的写法

本帖最后由 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 = MeterWindow or function(self, ...)
                        return MeterWindow.Bang(self,'!'..b,unpack(arg))
                end
      end
end

咣咣咣就是干 发表于 2018-8-15 00:37:42

但像这样需要传递Lua里变量的时候

seaneo 发表于 2018-8-14 23:35:06

通常使用SKIN对象的Bang()函数

咣咣咣就是干 发表于 2018-8-14 22:32:12

我是看到封面点进来的

seaneo 发表于 2018-8-14 21:29:42

--简化SKIN:Bang的写法

咣咣咣就是干 发表于 2018-8-14 20:26:37

虽然字数变多了

seaneo 发表于 2018-8-14 19:23:52


? ?? ?? ?? ?? ? MeterWindow = MeterWindow or function(self, ...)

seaneo 发表于 2018-8-14 17:18:23


? ?? ?? ?? ?? ? 'DisableMeasure',

咣咣咣就是干 发表于 2018-8-14 16:15:36


? ?? ?? ?? ???return SKIN:Bang('!SetOption', section, key, value)

seaneo 发表于 2018-8-14 15:12:50

? ?? ???local bangs = {

咣咣咣就是干 发表于 2018-8-14 14:10:04

另一个好处是
页: [1] 2 3 4 5
查看完整版本: 【Lua Snippet】简化Bang的写法