2011-06-30 41 views
0

如何提取函數體(作爲字符串)?例如,我調用C函數,從堆棧中提取函數,檢查類型是否爲LUA_TFUNCTION,以及我需要做些什麼來獲得它的主體?提取函數體

回答

2

當函數在堆棧上時,它已經被編譯。你可以嘗試做的最好的是lua_dump然後decode the bytecode

-2

調試庫可以做到這一點。 Lua C API沒有它,你會想爲此調用一個Lua函數。

+1

-1所有調試庫函數都是根據API函數定義的,如[lua_getinfo](http://www.lua.org/manual/5.1/manual.html#lua_getinfo)。 –

2

您可以用字符串參數「S」調用lua_getinfo,然後檢查lua_Debug結構的「source」成員。如果該字符串以'@'開頭,那麼它就是一個文件名,如果你想要源代碼,你需要重新讀取該文件(Lua只是逐步讀取文件來加載該函數,並且從未將其保存爲字符串)。否則,它的內容將是函數,定義加載塊的字符串。

注意,在這兩種情況下返回值將是整個塊是定義問題的功能source。您可以使用結構體中定義的其他字段將字符串縮小爲僅限於該函數:但請注意,這不能保證您能夠加載該字符串以獲得相同的行爲(函數定義可能指的是例如在外部範圍中定義的變量)。