尝试调用类方法时出错:尝试索引本地';自我';(a零值)-Lua

尝试调用类方法时出错:尝试索引本地';自我';(a零值)-Lua,lua,texas-instruments,Lua,Texas Instruments,我正在创建一个lua脚本,它应该在TI Nspire计算器上运行。问题是,在运行脚本时,当调用按钮:activate()方法时,我会遇到错误尝试索引本地“self”(一个nil值)。解析器说错误在下面代码的第8行。问题代码如下: button = class(view) function button:init() self.selected = false end function button:activate() self.selected = true end 我这

我正在创建一个lua脚本,它应该在TI Nspire计算器上运行。问题是,在运行脚本时,当调用
按钮:activate()
方法时,我会遇到错误
尝试索引本地“self”(一个nil值)
。解析器说错误在下面代码的第8行。问题代码如下:

button = class(view)

function button:init()
    self.selected = false
end

function button:activate()
    self.selected = true
end
我这样调用激活功能:

item = button()
local action = "activate"
local arguments = {}
item[action](unpack(arguments))

我知道
class()。您可以找到它的定义和用法。

obj:methodname(args)
obj.methodname(obj,args)
的糖。因此,如果要使用语法
item[action](解包(参数))
,则需要使用
item[action](item,解包(参数))
。否则,如果可以明确使用方法,请尝试
item:activate(unpack(arguments))

问题标题没有提供信息。抱歉,我已编辑了标题。这更好吗?谢谢你的回答!我无法显式调用该方法,因此我使用了
item[action](item,unpack(arguments))
,但它并不能完全解决我的问题。。。是的,错误消息消失了,但在调用该方法的行中,它被一条新消息替换。新的错误消息是:
尝试调用字段“?”(一个零值)
。你现在碰巧知道怎么解决这个问题了吗?谢谢@Frog,该消息表示
操作
不是
拥有的方法的名称。也许是一个误报?事实上,action不是方法的名称,而是一个字符串,它是方法的名称。我确信没有键入错误,因为在我的原始示例中调用了正确的函数(称为静态方法)。你知道可能出了什么问题吗?谢谢@Frog,在调用之前尝试
print(item,action,item[action])
。我不能使用
print()
(因为TI不显示输出,只将其发送到串行端口),但我只是将字符串拖到屏幕上。变量
item
每次都不一样,我曾经说过:“table:10e77440”。
action
变量为“activate”、“mousedown”、“mouseup”,具体取决于操作,最后,
item[action]
als等于零。我猜这意味着
项[动作]
没有定义。但是,当我可以调用
item:activate()
时,这怎么可能呢?