我的直觉告诉我,我犯了一个明显的错误,但它正在逃避我。我正在尝试使用以下示例代码从指定的“父”对象创建“子”对象。
local Ad = {
__index = Ad,
__tostring = function(self) return self.msg end,
__concat = function(a, b) return tostring(a)..tostring(b) end,
Initialize = function(self, msg, wgt)
if msg and msg ~= "" then
wgt = wgt or 1
self.msg, self.wgt, self.ranLog = msg, wgt, {}
end
end,
Increase = function(self)
if self.wgt < 9 then self.wgt = self.wgt + 1 end
end,
Decrease = function(self)
if self.wgt > 1 then self.wgt = self.wgt - 1 end
end
}
local function new(src, ...)
local o = setmetatable({}, src)
if src.Initialize then o:Initialize(...) end
return o
end
local ad = new(Ad, "Test Message")
print("Object - "..ad)
for k, v in pairs(ad) do print("", k, v) end
ad:Increase()
print("Modified Object - "..ad)
for k, v in pairs(ad) do print("", k, v) end
所以这就是尝试调用方法 Initialize 失败的原因,该方法是一个 nil 值。鉴于在此编辑之前我的示例代码确实有效,是否与表 Ad 的定义方式有关?或者我在这里的某个地方有语法错误?
- 编辑以用失败的实际代码替换代码片段