【问题标题】:Error while trying to call a class method: attempt to index local 'self' (a nil value) - Lua尝试调用类方法时出错:尝试索引本地“自我”(零值)-Lua
【发布时间】:2011-11-13 06:14:46
【问题描述】:

我正在创建一个应该在 TI-Nspire 计算器上运行的 lua 脚本。问题是,在运行我的脚本时,当调用 button:activate() 方法时出现错误 Attempt to index local 'self' (a nil value)。解析器说错误在下面代码的第 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() 函数在“stock” Lua 中不存在,它是 TI-Nspire Lua 实现中可用的函数。你可以找到它的定义和用法here

【问题讨论】:

  • 问题标题没有提供信息。
  • 抱歉,我已经编辑了标题。这样更好吗?

标签: lua texas-instruments


【解决方案1】:

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

【讨论】:

  • 感谢您的回答!我无法显式调用该方法,所以我选择了item[action](item, unpack(arguments)),但它并没有完全解决我的问题......是的,错误消息消失了,但它被替换为新的调用行方法。新的错误消息是:attempt to call field '?' (a nil value)。你碰巧现在如何解决这个问题?谢谢!
  • @Frog,该消息表明action 不是item 拥有的方法的名称。也许是拼写错误?
  • 确实,action 不是方法名,它是一个字符串,即方法名。我确定没有输入错误,因为在我的原始示例中调用了正确的函数(称为静态方法)。你知道可能出了什么问题吗?谢谢!
  • @Frog,在通话前尝试print(item,action,item[action])
  • 我不能使用print()(因为TI不显示输出,只发送到串口),但我只是将字符串拉到屏幕上。变量item每次都不一样,我曾经有:“table:10e77440”。 action 变量可以是“activate”、“mousedown”、“mouseup”,具体取决于操作,最后,item[action] 也等于 nil。我想这意味着 item[action] 没有定义。但是,当我可以拨打item:activate() 时,这怎么可能呢?
猜你喜欢
  • 2014-10-08
  • 2012-12-13
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2019-01-06
  • 2015-06-15
  • 2016-06-21
  • 1970-01-01
相关资源
最近更新 更多