Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Lua从字符串到动作?_String_Lua_Action - Fatal编程技术网

String Lua从字符串到动作?

String Lua从字符串到动作?,string,lua,action,String,Lua,Action,我刚刚做了一个家庭作业来创建一个lua菜单,它尽可能小,并且尽可能友好 目前它有32行长,使用方式如下: menu_name = "Mahi's Lua Menu Template v1" menu_items = { "Move menu to left", "Move menu to right", "Reset menu position", "Exit menu" } function use(item) if item==1 then menup

我刚刚做了一个家庭作业来创建一个lua菜单,它尽可能小,并且尽可能友好

目前它有32行长,使用方式如下:

menu_name = "Mahi's Lua Menu Template v1"
menu_items = {
    "Move menu to left",
    "Move menu to right",
    "Reset menu position",
    "Exit menu"
}
function use(item)
    if item==1 then menupos=menupos-1
    elseif item==2 then menupos=menupos+1
    elseif item==3 then menupos=3
    elseif item==4 then quit=true end
end
我想将函数use()替换为

menu_actions = {
    "menupos=menupos-1",
    "menupos=menupos+1",
    "menupos=3",
    "quit=true"
}
但现在的问题是,当这些动作是字符串时,我不能使用它们。有什么方法可以“删除”引号吗

我已经为此自定义了使用功能:

function use()
    for i=1,#menu_actions do
        if i==selection then
            toaction(menu_actions[i])
        end
    end
end
当然,没有像“toaction”这样的命令,但这就是我要寻找的,是可能做到这一点,还是我必须坚持使用当前使用的函数

编辑:我刚刚意识到,可以通过将文本从menu_actions表写入一个.lua文件,然后删除引号,然后运行lua文件,并在menu关闭后删除它来完成。。。但这太慢了,还有更好的主意吗

Edit2:已解决

function toaction(s)   
  if _G[s]==nil then _G[s]=loadstring(s) end 
  _G[s]() 
end
谢谢,这很有效D 但是再一次,我可以用loadstring()替换整个toaction()

但是谢谢,我不知道有一个名为loadstring>的函数,请尝试以下操作:

function toaction(s)
  if _G[s]==nil then _G[s]=loadstring(s) end
  _G[s]()
end
试试这个:

function toaction(s)
  if _G[s]==nil then _G[s]=loadstring(s) end
  _G[s]()
end

不,您不能用
loadstring
替换
toaction
,因为
loadstring
不执行代码,它只转换为函数。另外请注意,我的
toaction
缓存了转换,因此它只执行一次。是的,它将转换为代码,然后在它之后添加额外()并加载函数……不,您不能将
toaction
替换为
loadstring
,因为
loadstring
不执行代码,它只转换为函数。还要注意,我的
toaction
缓存了转换,因此它只执行一次。是的,它将转换为代码,然后在其后面添加额外()并加载函数。。。