Lua - 将对象函数与对象的参数联系起来

时间:2017-06-05 20:34:40

标签: lua

我试图为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);

我做错了什么?我只是没有看到它。

1 个答案:

答案 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")

这对你有用吗?