22
A
回答
33
要調用的全局命名空間功能(如@ THC4k提到的)是很容易做到,而且不需要loadstring()
。
x='foo'
_G[x]() -- calls foo from the global namespace
您將需要使用loadstring()
(或步行的每個表),如果在另一個表的功能,例如,如果x='math.sqrt'
。
如果使用loadstring()
,則您不僅希望在圓括號中添加橢圓(...)
以允許參數,還可以將return
添加到前面。
x='math.sqrt'
print(assert(loadstring('return '..x..'(...)'))(25)) --> 5
或步行表:
function findfunction(x)
assert(type(x) == "string")
local f=_G
for v in x:gmatch("[^%.]+") do
if type(f) ~= "table" then
return nil, "looking for '"..v.."' expected table, not "..type(f)
end
f=f[v]
end
if type(f) == "function" then
return f
else
return nil, "expected function, not "..type(f)
end
end
x='math.sqrt'
print(assert(findfunction(x))(121)) -->11
4
名稱不是唯一的,在不同的名稱空間中可能有許多函數名稱foo。但全局名稱空間中的_G['foo']
是foo
。
1
這聽起來像你想要做一個「EVAL」,這是在Lua支持像這樣:
assert(loadstring(x))()
你可能想先串聯的「()」到X,雖然。
9
loadstring
不是這裏的答案。對於初學者,您需要在字符串中輸入return
,以及其他我不會涉及的細節。
THC4k有正確的想法;如果您在變量x的函數名,那麼你要調用的是
_G[x](arg1, arg2, ...)
9
我經常放了一堆的功能表:
functions = {
f1 = function(arg) print("function one: "..arg) end,
f2 = function(arg) print("function two: "..arg..arg) end,
...,
fn = function(arg) print("function N: argh") end,
}
然後你可以使用一個字符串作爲表的索引和運行像這樣的功能
print(functions["f1"]("blabla"))
print(functions["f2"]("blabla"))
這是結果如下:
function one: blabla
function two: blablablabla
我覺得這比使用loadstring()
要乾淨。如果您不想創建特殊功能表,則可以使用_G['foo']
。
相關問題
- 1. LUA:使用其名稱(字符串)在類中調用函數
- 2. Lua使用其名稱調用函數(字符串)
- 3. 從字符串創建Lua函數
- 4. 使用Clojure中函數名稱的字符串調用函數
- 5. 帶參數列表的字符串中的Lua函數調用
- 6. 從字符串中調用Javascript函數
- 7. 用C++ Lua函數返回字符串
- 8. 從C++調用Lua函數
- 9. 從string_t調用Lua函數
- 10. 調用Win32函數在Lua中返回外來字符串
- 11. 基於包含函數名稱的字符串調用函數
- 12. Mako從字符串調用函數?
- 13. 從字符串調用JavaScript函數
- 14. 從HTML字符串調用php函數
- 15. 如何從另一個lua函數調用lua函數?
- 16. Angular 2:從字符串名稱中調用函數
- 17. LUA - 如何使用_G [x]()方法從字符串中調用函數
- 18. 從Lua程序中調用python函數
- 19. 從lua腳本中調用c函數
- 20. 使用字符串名稱在$(document).ready函數中調用javascript函數
- 21. 如何使用R中函數名稱的字符串調用函數?
- 22. 如何從字符串調用匿名函數
- 23. 從f的名稱作爲字符串調用函數#
- 24. 從字符串調用php函數名稱
- 25. 從Window對象的字符串名稱調用函數
- 26. Javascript:調用一個函數用字符串匿名函數編寫,函數的名字沒有eval?
- 27. 使用字符串名稱從數組中運行函數
- 28. Lua - 找出調用函數
- 29. 從函數調用匿名函數
- 30. PHP函數從字符串