我试图为WoW的客户做一个简单的练习。
我有下一个目标:
local name = detailsFrame:CreateFontString("$name", "ARTWORK", "Fancy24Font")
name.SetFontObjects = MySetFontObjects;
MySetFontObjects函数是下一个函数:
function MySetFontObjects (self, ...) {
self.fontObjects = { ... };
--more stuff
}
如果我尝试调用该函数,则返回attempt to call a method 'MySetFontObjects' (a nil value)
我这样称呼它:
name:SetFontObjects(Font1, Font2, Font3);
我做错了什么?我只是没有看到它。
答案 0 :(得分:2)
你在做这样的事吗?
local name = {}
name.SetFontObjects = MySetFontObjects
function MySetFontObjects (self, ...)
self.fontObjects = { ... }
--more stuff
end
name:SetFontObjects("foo", "bar", "baz")
这会产生"尝试调用方法' SetFontObjects' (零值)"您似乎在报告错误。
这是因为当您设置name.SetFontObjects = MySetFontObjects
时,MySetFontObjects
函数尚未定义,因此MySetFontObjects
默认为值为nil
的全局变量。要解决此问题,只需将函数定义移到该语句上方:
function MySetFontObjects (self, ...)
self.fontObjects = { ... }
--more stuff
end
local name = {}
name.SetFontObjects = MySetFontObjects
name:SetFontObjects("foo", "bar", "baz")
这对你有用吗?