2012-05-29 45 views
0

在lua中,是否可以序列化函數(不帶upvalues)並將它們存儲起來而不使用LOADSTRINGLua - 序列化沒有加載字符串的函數?

+1

你可以給你更多的信息,你想要做什麼?你的意思是以某種方式序列化它們,以便以後不需要使用loadtring?因爲你會使用string.dump來序列化函數。 –

+0

我無法使用loadstring作爲我的lua引擎阻止其使用。 那麼現在可以存儲函數供以後使用嗎? – SatheeshJM

回答

2

您可以序列化並存儲它們,根本不需要loadstring - 使用string.dump。如果您想將它們變回原狀,您只需要loadstring

如果您以後需要它重新使用實際功能(而不是用於其他一些簡單目的,比如比較),您仍然需要訪問至少字符串版本的loadstring,因爲這是唯一允許您評估在飛行中的Lua來源。如果你有它,你可以嘗試: 1)如果你有訪問權限,修改Lua引擎本身來保存函數定義的源代碼。 2)將Lua字節碼寫入Lua中的Lua源代碼轉換器。 Lua的簡單虛擬機並不像聽起來那麼困難。

如果您完全不能訪問loadstring,您可以嘗試在Lua中編寫Lua VM。這比一個簡單的轉換器更難,但仍然非常可行。

+0

嗯嗯..感謝您的詳細解答! 寫一個虛擬機是超出我的,不值得肯定! 無論如何,謝謝! – SatheeshJM