在Lua中,我爲表格/對象創建了一個漂亮的打印機。但是,當顯示一個函數時,它顯示爲一個指針。如何通過Lua中的指針獲取函數的名字?
我一直在閱讀Lua Introspection,但是當我用debug.getinfo()
反思函數時,它不會返回函數的名字。這似乎是由於一個範圍問題,但我不知道如何解決這個問題。
使用指針獲取函數名稱的最佳方法是什麼? (我明白函數是Lua中的一等公民,並且它們可以匿名創建,這很好)
在Lua中,我爲表格/對象創建了一個漂亮的打印機。但是,當顯示一個函數時,它顯示爲一個指針。如何通過Lua中的指針獲取函數的名字?
我一直在閱讀Lua Introspection,但是當我用debug.getinfo()
反思函數時,它不會返回函數的名字。這似乎是由於一個範圍問題,但我不知道如何解決這個問題。
使用指針獲取函數名稱的最佳方法是什麼? (我明白函數是Lua中的一等公民,並且它們可以匿名創建,這很好)
當您創建函數時,將它們註冊到表中,並將它們用作關鍵字。
local tableNames = {}
function registerFunction(f, name)
tableNames[f] = name
end
function getFunctionName(f)
return tableNames[f]
end
...
function foo()
..
end
registerFunction(foo, "foo")
...
getFunctionName(foo) -- will return "foo"
@Soviut我也會迴應這樣的事情。從技術上講,Lua函數沒有名稱。當你輸入'function foo()'時,它和'foo = function()'是一樣的。換句話說,函數是一個自由代理,它恰好有一個名爲'foo'的變量指向它。 – TheBuzzSaw 2012-01-15 17:04:53
由於某些原因,它似乎只適用於數字參數(即堆棧中的活動函數)。
腳本
function a() return debug.getinfo(1,'n') end
function prettyinfo(info)
for k,v in pairs(info) do print(k,v) end
end
prettyinfo(a())
打印
name a
namewhat global
,但如果我的最後一行改爲
prettyinfo(debug.getinfo(a, 'n'))
它給我的只有一個空字符串:
namewhat
看到這個問題:http://stackoverflow.com/questions/4021816/ – sbk 2012-01-15 00:23:02
我希望能夠做到這一點,而不必實際修改函數。我想獲得我的表格打印機的功能名稱。 – Soviut 2012-01-15 01:42:54