使用load()将字符串用作函数时返回“尝试调用空值”

所以我正在开发一个游戏,我想使用一个可以作为函数调用的字符串,以便我可以一次性快速调用多个函数。我有一个示例,我正在努力让它工作:

function state_machine_1()
    print("你好世界")
end

function state_machine_2()
    print("再见世界")
end

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

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

当我在lua演示网站上运行代码时,我现在得到的完全相同的错误是“尝试调用空值”。我已经尝试进行搜索,但是搜索引擎甚至带有上下文都不知道load()是什么。有什么想法可以改变吗?

点赞
用户9095619
用户9095619

你可能想要在一个表中定义函数,并像这样使用表格来查找所需的函数:

local funcs = {}

function funcs.state_machine_1()
  print("Hello World")
end

funcs.state_machine_2 = function() -- 另一种在表中定义函数的方法
  print("Goodbye World")
end

local func = "state_machine_" .. "1"

funcs[ func ]()

func = "state_machine_" .. "2"

funcs[ func ]()

load 函数接受包含实际 Lua 代码的字符串: 在 Lua 中 'load' 是什么意思?

2020-08-07 15:05:27
用户9095619
用户9095619

将下面翻译成中文并且保留原本的 markdown 格式

因为编译代码失败,所以会发生“nil error”。

你可以添加一个 assert 去捕获编译错误。

assert(load(func))()

它失败的原因是 func 应该以 () 结尾,以便成为一个函数调用。

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

assert(load(func))()
2020-08-07 15:18:09