имя функции lua для каждой строки - PullRequest
0 голосов
/ 25 июня 2019

поэтому я пытаюсь добавить функцию для каждой пары FX. Я перепробовал все, что мог придумать, я искал и искал способ

, я пытался lua _G[tes](arg1, arg2), некоторые говорили, что он должен это сделать, не может 'чтобы заставить его работать так, как я пытался lua loadstring - / -

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

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

local run = math.random(1,3)

for nr, name in pairs(test) do
  if run == nr then
    name()
  end
end

Ответы [ 3 ]

0 голосов
/ 25 июня 2019

Если у вас есть переменная 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 = {}

-- 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
0 голосов
/ 26 июня 2019

получил это работает для того, что я хотел, как это спасибо вам 2 за помощь и информацию

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

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

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
0 голосов
/ 25 июня 2019
test = {
  "jhon",
  "bob"
}

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

jhon()  --> I'm jhon
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...