尝试调用类方法时出错:尝试索引本地';自我';(a零值)-Lua
我正在创建一个lua脚本,它应该在TI Nspire计算器上运行。问题是,在运行脚本时,当调用尝试调用类方法时出错:尝试索引本地';自我';(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 我这
按钮: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()
时,这怎么可能呢?