首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串调用对象方法

从字符串调用对象方法
EN

Stack Overflow用户
提问于 2019-05-22 15:36:55
回答 1查看 61关注 0票数 1

我的lua脚本中有一个主循环,我包含了两个这样的对象:

代码语言:javascript
复制
local Menu = require("menu")
local InputHandler = require("inputhandler")

以下是每个对象的脚本:

menu.lua

代码语言:javascript
复制
Menu = {
  Active = false,
  Initialise = function(self)
  end,
  ToggleMenu = function(self)
    self.Active = not self.Active
    print(self.Active)
  end
}
return Menu

和inputhandler.lua

代码语言:javascript
复制
InputHandler = {
  KeyBinds = {
    q = { scancode = 16, bind = "q", action = "Menu:ToggleMenu" }
  },
  RunKeyAction = function (self, key)
    for k, v in pairs(self.KeyBinds) do
      if (v.bind == key) then
        _G[v.action]()
      end
    end
  end
}
return InputHandler

基本上,我试图将键盘键映射到脚本中的各种函数,所以当有人按下"Q“键时,它将运行与该键相关的方法。

所以如果我做这样的事

代码语言:javascript
复制
InputHandler:RunKeyAction("q")

它将运行以下方法:

代码语言:javascript
复制
Menu:ToggleMenu()

当我像现在一样运行这个脚本时,我会得到以下错误:

代码语言:javascript
复制
lua: ./classes//inputhandler.lua:8: attempt to call field '?' (a nil value)
stack traceback:
    ./classes//inputhandler.lua:8: in function 'RunKeyAction'
    [string "<eval>"]:20: in main chunk

有人能告诉我正确的做法吗?

感谢您的阅读

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-22 15:58:51

使用

代码语言:javascript
复制
q = { scancode = 16, bind = "q", action = Menu.ToggleMenu }

代码语言:javascript
复制
v:action()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56260440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档