Function 为每个字符串指定一个函数名

Function 为每个字符串指定一个函数名,function,lua,Function,Lua,所以我试着为每对fx添加一个函数,我已经尝试了我能想到的一切,我一直在寻找一种方法 我尝试了lua\u G[tes](arg1,arg2)一些人说它应该这样做,但它无法像我尝试的那样工作lua loadstring-/- 测试={ “约翰”, “鲍勃”, “迈克” } 对于nr,成对命名(测试)do _G[name]=函数() 打印(“我是”。.姓名) 结束 结束 本地运行=数学随机(1,3) 对于nr,成对命名(测试)do 如果run==nr,则 姓名() 结束 结束 当您有一个变量tes并定

所以我试着为每对fx添加一个函数,我已经尝试了我能想到的一切,我一直在寻找一种方法

我尝试了lua\u G[tes](arg1,arg2)一些人说它应该这样做,但它无法像我尝试的那样工作
lua loadstring
-/-

测试={
“约翰”,
“鲍勃”,
“迈克”
}
对于nr,成对命名(测试)do
_G[name]=函数()
打印(“我是”。.姓名)
结束
结束
本地运行=数学随机(1,3)
对于nr,成对命名(测试)do
如果run==nr,则
姓名()
结束
结束

当您有一个变量
tes
并定义
本地函数tes()
时,它只会覆盖变量
tes
。更准确地说,它会给它蒙上阴影,但这在这里真的没有什么区别

您也不能动态声明局部变量,因此这是不可能的;hovewer可以声明全局变量,因为它们甚至不是实变量,而是名为全局环境的表中的键值对

在Lua5.1及更早版本中,您可以通过
\u G
值访问全局环境;在Lua5.2及更高版本中,您也可以使用
\u ENV
变量,但
\u G
仍然适用于您的目的

要添加一个新的“全局”变量,只需为该表编制索引并向其添加一个新的键值对:

for _, letter in ipairs {'a', 'b', 'c', 'd', 'e'} do
  _G[letter] = function() print(letter) end
end

a() --> prints "a"
b() --> prints "b"
-- etc.
但你必须记住的是:

local name = 'John'
local tab = {}

-- These are all equivalent:
tab[name] = 'Doe' -- Gets the actual contents of name, which is 'John'
tab['John'] = 'Doe'
tab.John = 'Doe'
-- After any of those, tab looks like this: {John = 'Doe'}
-- (Which is the same as {['John'] = 'doe'})

-- This one is different though:
tab.name = 'Doe'
-- After this, tab looks like this: {name = 'Doe'}
-- (Which is the same as{['name'] = 'Doe'} )
因此,如果您有一个包含字符串的变量
tes
,则必须执行以下操作

_G[tes] = function()
  -- Do stuff with tes
end

得到了它的工作,我想像这个thx你2的帮助和信息

测试={
“约翰”,
“鲍勃”,
“迈克”,
“ELF0001”
}
本地运行=4
-------------------------------
对于nr,成对命名(测试)do
_G[name.“r”]=函数()
打印(“我不是”。.姓名)
结束
结束
对于nr,成对命名(测试)do
_G[name.“a”]=函数()
打印(“我是”。.姓名)
结束
结束
--------------------------------
对于nr,成对命名(测试)do
如果run~=nr,则
_G[名称.“r”]()
结束
结束
对于nr,成对命名(测试)do
如果run==nr,则
_G[名称.“a”]()
结束
结束

当您尝试登录新站点时。。。。然后下一个问题是,我如何触发它,像这样的fx
lua test={*/“jhon”、*/“bob”、*/“mike”*/}*/*/对于nr,成对命名(test)do*/_G[name]=function()*/print(“i'm”。.name)*/end*/end*/end*/local run=math.random(1,3)*/*/对于nr,成对命名(test)do*/如果run==nr那么*/name()*/end*/end*/
虽然这个代码片段可能是解决方案,但确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
_G[tes] = function()
  -- Do stuff with tes
end