Lua每个字符串的函数名称

所以我正在尝试为每个fx对添加一个函数,我尝试了我能想到的一切,我寻找了很长时间的方法

我尝试了 lua _G[tes](arg1, arg2) 有人说应该可以做到,但我无法让它以那种方式工作,我尝试了 lua loadstring -/-

test = {
  "jhon",
  "bob",
  "mike"
}

for nr, name in pairs(test) do
  _G[name] = function ()
    print("我是"..name)
  end
end

local run = math.random(1,3)

for nr, name in pairs(test) do
  if run == nr then
    name()
  end
end
点赞
用户6834680
用户6834680
test = {
  "jhon",
  "bob"
}

for nr, name in pairs(test) do
  _G[name] = function ()
    print("I'm "..name)
  end
end

jhon()  --> I'm jhon
test = {
  "jhon",
  "bob"
}

for nr, name in pairs(test) do
  _G[name] = function ()
    print("我是"..name)
  end
end

jhon()  --> 我是jhon
2019-06-25 17:12:04
用户4984564
用户4984564

当你有变量tes并定义了local function tes()时,它将覆盖变量tes。确切地说,它将遮盖它,但这在这里并没有什么区别。

你也不能临时声明局部变量,所以这是不可能的;然而,你可以声明全局变量,因为它们甚至不是真正的变量,而是一个被称为全局环境的键值对表。

在Lua 5.1及之前的版本中,可以通过_G值访问全局环境;在Lua 5.2及以上版本中,您也可以使用_ENV变量,但_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 = {}

-- 这些都是等价的:
tab[name] = 'Doe' -- 获取name的实际内容,即'John'
tab['John'] = 'Doe'
tab.John = 'Doe'
-- 之后,tab看起来像这样:{John = 'Doe'}
-- (与{['John'] = 'doe'}相同)

-- 但是这个不同:
tab.name = 'Doe'
-- 之后,tab看起来像这样:{name = 'Doe'}
-- (与{['name'] = 'Doe'}相同)

所以如果你有一个包含字符串的变量tes,你必须这样做:

_G[tes] = function()
  -- Do stuff with tes
end
2019-06-25 17:20:23
用户11698140
用户11698140
test = {
  "jhon",
  "bob",
  "mike",
  "ELF0001"
}

local run = 4

------------------------------------

-- 创建函数,不同的函数输出不同的结果
for nr, name in pairs(test) do
  _G[name .. "r"] = function ()
    print("I'm Not "..name)
  end
end

for nr, name in pairs(test) do
  _G[name .. "a"] = function ()
    print("I'm "..name)
  end
end

-----------------------------------

-- 根据 run 变量的值执行不同的函数
for nr, name in pairs(test) do
  if run ~= nr then
    _G[name .. "r"]()
  end
end

for nr, name in pairs(test) do
  if run == nr then
    _G[name .. "a"]()
  end
end

通过这段代码,创建了两组不同的函数,分别输出 "I'm Not " 和 "I'm ",并且根据变量 run 的值分别执行对应的函数。

2019-06-26 01:05:15