【问题标题】:When using load() to use a string as a function. It returns "attempt to call a nil value"使用 load() 将字符串用作函数时。它返回“尝试调用零值”
【发布时间】:2020-11-27 22:33:29
【问题描述】:

所以我正在开发一款游戏,我想使用一个可以作为函数调用的字符串,这样我就可以一次快速调用多个函数。我有一个我正在努力工作的例子:

function state_machine_1()
    print("Hello world")
end

function state_machine_2()
    print("Goodbye world")
end

local func="state_machine_".."1"
load(func)()

func="state_machine_".."2"
load(func)()

当我在 lua 演示站点中运行代码时,我现在得到完全相同的错误,即“尝试调用 nil 值”。我试过查找它,但 load() 太模糊,搜索引擎即使有上下文也无法知道。有什么我可以改变的想法吗?

【问题讨论】:

    标签: lua love2d


    【解决方案1】:

    nil 错误发生是因为它无法编译代码

    你可以添加一个断言来捕获编译错误

    assert(load(func))()
    

    它失败的原因是因为func 应该以() 结尾才能成为函数调用。

    local func = "state_machine_" .. "1" .. "()"
    
    assert(load(func))()
    

    【讨论】:

      【解决方案2】:

      您可能希望在表格中定义函数并使用桌面查找所需的函数,如下所示:

      local funcs = {}
      
      function funcs.state_machine_1()
        print("Hello World")
      end
      
      funcs.state_machine_2 = function() -- another to define the function in a table
        print("Goodbye World")
      end
      
      local func = "state_machine_" .. "1"
      
      funcs[ func ]()
      
      func = "state_machine_" .. "2"
      
      funcs[ func ]()
      

      加载函数接受一个包含实际 Lua 代码的字符串: what do 'load' do in Lua?

      【讨论】:

      • 这还不错。不完全是我想要的,但如果这是我能得到的唯一答案,那么我会接受它。
      • 非常感谢。缺少的 .."()" 正是我所需要的。
      • 只是一个字符串。 - Lua5.3 中有另一种字符串,它对不同类型的代码非常有用。我将它用于包含不同代码的 HTML 模块,例如:HTML、CSS、JavaScript、SVG,以及所需的行数。在 Lua 中尝试:foo=[[return '<div style="color:red;">bar</div>']] 执行:print(load(foo)())
      猜你喜欢
      • 1970-01-01
      • 2018-05-19
      • 2020-08-17
      • 2021-02-15
      • 2020-04-10
      • 1970-01-01
      • 2022-10-18
      • 1970-01-01
      • 2020-05-05
      相关资源
      最近更新 更多