self和this的区别是啥?
去[url=http://www.wowace.com/]www.wowace.com[/url]上边看了一些资料,ACE2的管网上也有没写的东东,例如AceConsole-2.0的说明就基本没有。。。说正题,我看啊看啊,看到AceDB-2.0东西,他们的例子全部都是用self.db.account.xxx,我也这么写了以后报错,self是空值,不解中。。。。
还有问题,关于slash命令的,用ace的写法是作一个表,类似以下[language=lua]type = 'text',
name = '名字',
desc = '注释',
usage = '使用方法',
get = '函数a
set = '函数b
[/language]我这么写完以后,一共4个slash命令,都正常注册了,在Niagara下边也都能看到4个命令了,但是系统提示第二个命令制定的函数不是一个合适的函数。弄了一个下午无解,,,,
再问下函数a和函数b能合并成一个函数不?就是get和set后边都写一个名字。 只有在类似于 aTable:Func() 的函数中,方可使用 self 来指代 aTable 。例如:
[language=lua]function phRaid2:OnInitialize()
self.db.profile.Enabled = true
end[/language]
在全局名域中,self 值为空。
关于 AceConsole 的表的写法的内容,可以参见[url=http://www.wowace.com/wiki/AceOptions_data_table]http://www.wowace.com/wiki/AceOptions_data_table[/url]
属性的访问器 get 和 set 的功能是不同的,get 用于获取值,对应一个无参数的函数; set 用于设置值,对应一个单参数的函数。这是无法合并的。
另外,写出的Slash命令可以正确注册,说明没有语法问题。可以把你的表的代码和系统提示贴出来,进行进一步分析。 感谢楼上,好快的速度。。。
看了你的回帖,有点顿悟的感觉,以前出错是因为我把两个函数合并的原因。
LUA会自动把一个函数根据函数的内容判断这个函数的类型吧?我记得以前写C的时候用void去定义无参数的函数,但是LUA没有对应的写法。
当时写的时候也没有考虑的这些,只是看一个命令要对应两个函数,函数的内容又太少,所以就。。。。 Lua 的函数声明:
[language=lua]function funca(arg1)
function funcb()
function funcc(arg1, arg2, ...)[/language]
和 C/C++ 的区别:
声明中没有规定返回值。返回值在函数体中用 return 语句返回。
PS:C/C++ 中的 void 是返回值类型。 这回明白了,再次感谢。
还是搞不定。。。那位有功夫帮我看下?谢谢!
[language=lua]## Interface: 20000
## Title: tBc1c
## Notes: to Broadcast.
## Author: No.1dea
## Version: 0.1
## OptionalDeps: Ace2
## SavedVariables: tBc1cDB
## SavedVariablesPerCharacter: tBc1cDBPC
## X-Category: Chat/Communication
..\!!!cwdgacelibs\AceLibrary\AceLibrary.lua
..\!!!cwdgacelibs\AceOO-2.0\AceOO-2.0.lua
..\!!!cwdgacelibs\AceAddon-2.0\AceAddon-2.0.lua
..\!!!cwdgacelibs\AceDB-2.0\AceDB-2.0.lua
..\!!!cwdgacelibs\AceConsole-2.0\AceConsole-2.0.lua
..\!!!cwdgacelibs\AceEvent-2.0\AceEvent-2.0.lua
tbc1c.xml
[/language]
[language=xml]
<Ui>
<Script file="tbc1c.lua"/>
<Frame name="tbc1c">
<Scripts>
<OnLoad>
tBc1c:OnEnable();
</OnLoad>
<OnUpdate>
tBc1c:update(arg1);
</OnUpdate>
</Scripts>
</Frame>
</Ui>
[/language]
[language=lua]
t0 = 0 --计时器变量
opts = {
type = 'group',
args = {
msg = {
type = 'text',
name = '消息:',
desc = '要发布的信息',
usage = '/self msg 你要发布的消息',
get = 'GetMsg',
set = 'SetMsg',
},
ch = {
type = 'text',
name = '方式',
desc = '你要广播的方式',
usage = '/self ch [wisper,say,yell,party,guild,officer,raid,raid_warning,battleground,wisper,channel]',
get = 'GetCh',
set = 'SetCh',
},
chna = {
type = 'text',
name = '频道',
desc = '你要广播的频道名称',
usage = '/self chna 频道名称',
get = 'GetChNa',
set = 'SetChNa',
},
t = {
type = 'text',
name = '间隔(秒)',
desc = '发布信息的时间间隔',
usage = '/self time 你要发布信息的时间间隔',
get = 'GetTi',
set = 'SetTi',
},
}
}
tBc1c = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0","AceConsole-2.0","AceDB-2.0");
tBc1c:RegisterChatCommand("/tbc1c", opts);
tBc1c:RegisterDB("tBc1cDB","tBc1cDBPC");
tBc1c:RegisterDefaults('profile',{
msg = "下午好。",
ch = "say",
chna = "",
t = t,
});
function GetMsg()
return self.db.profile.msg
end
function SetMsg(arg1)
self.db.profile.msg = arg1
end
function GetCh()
return self.db.profile.msg
end
function SetCh(arg1)
self.db.profile.ch = arg1
end
function GetChNa()
return self.db.profile.ch
end
function SetChNa(arg1)
self.db.profile.chna = arg1
end
function GetTi()
return self.db.profile.chna
end
function SetTi(arg1)
self.db.profile.t = arg1
end
function tBc1c:OnEnable()
self:RegisterEvent("ADDON_LOADED");
end
function tBc1c:ADDON_LOADED(arg1)
if (arg1 == "Informant") then SendChatMessage("下午好!","say");end;
end;
function tBc1c:update(arg1)
t0=t0+arg1
if (t0 > self.db.profile.t) then
do
SendChatMessage(self.db.profile.msg,self.db.profile.ch,nil,self.db.profile.chna);
SendChatMessage("☆★☆本消息"..self.db.profile.t.."秒重复一次,扰屏见谅。☆★☆",self.db.profile.ch,nil,self.db.profile.chna);
t0=0;
end;
end;
end
[/language] 一共两个错误,一个还是老问题,函数不合适,晕ing....
第二个是存取的错误,貌似我存的变量还是没读出来,或者根本就没写进去(汗+寒)+ing....
详细的看图吧。 那位帮我看以下呗,麻烦了。
页:
[1]