Lua - 将函数与对象参数关联

我正在尝试为魔兽世界的客户端做一个简单的练习。

我有如下的对象:

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);

我做错了什么?我就是看不到它。

点赞
用户5287638
用户5287638

你是不是在做类似这样的事情?

local name = {}
name.SetFontObjects = MySetFontObjects

function MySetFontObjects (self, ...)
    self.fontObjects = { ... }
    --更多的东西
end

name:SetFontObjects("foo", "bar", "baz")

这会产生“尝试调用方法 'SetFontObjects'(空值)”的错误,这似乎是你所报告的。

这是因为当你设置name.SetFontObjects = MySetFontObjects时,MySetFontObjects函数尚未定义,因此默认值为具有nil值的全局变量。要解决这个问题,只需在该语句之前移动函数定义:

function MySetFontObjects (self, ...)
    self.fontObjects = { ... }
    --更多的东西
end

local name = {}
name.SetFontObjects = MySetFontObjects

name:SetFontObjects("foo", "bar", "baz")

这对你有效吗?

2017-06-05 23:45:37