2012-01-14 1155 views
1

在Lua中,我爲表格/對象創建了一個漂亮的打印機。但是,當顯示一個函數時,它顯示爲一個指針。如何通過Lua中的指針獲取函數的名字?

我一直在閱讀Lua Introspection,但是當我用debug.getinfo()反思函數時,它不會返回函數的名字。這似乎是由於一個範圍問題,但我不知道如何解決這個問題。

使用指針獲取函數名稱的最佳方法是什麼? (我明白函數是Lua中的一等公民,並且它們可以匿名創建,這很好)

+2

看到這個問題:http://stackoverflow.com/questions/4021816/ – sbk 2012-01-15 00:23:02

+0

我希望能夠做到這一點,而不必實際修改函數。我想獲得我的表格打印機的功能名稱。 – Soviut 2012-01-15 01:42:54

回答

3

當您創建函數時,將它們註冊到表中,並將它們用作關鍵字。

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" 
+3

@Soviut我也會迴應這樣的事情。從技術上講,Lua函數沒有名稱。當你輸入'function foo()'時,它和'foo = function()'是一樣的。換句話說,函數是一個自由代理,它恰好有一個名爲'foo'的變量指向它。 – TheBuzzSaw 2012-01-15 17:04:53

1

由於某些原因,它似乎只適用於數字參數(即堆棧中的活動函數)。

腳本

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