2011-12-22 58 views
1

我正在使用C模糊API,我想加載一個文件中包含的功能模塊可以說mycalculator.lua。這似乎運行良好,但是當我稍後嘗試運行另一個需要'mycalculator'的文件A.lua時,它不起作用,除非mycalculator.lua文件在文件系統上可用以重新加載。我試圖將它加載到系統中,然後在文件系統中沒有mycalculator.lua的情況下使用它。有沒有辦法讓lua系統在不加載的情況下保持定義?基本上我將mycalculator.lua轉換成一個字符串,然後運行它。我不希望將mycalculator.lua文件放入文件系統,我只想將它作爲字符串交付,然後能夠在下一個字符串中要求它傳遞給堆棧謝謝如何在Lua中添加函數定義而不需要加載文件?

+0

什麼*做*你有一個地方把這個字符串?字符串在文件系統中並不神奇,它們總是需要某種存儲。你打算如何執行A.lua? – kikito 2011-12-22 08:35:18

回答

2

有一個簡單地執行Lua腳本和加載Lua模塊之間的區別。如果你想加載一個Lua模塊,那麼你必須實際加載一個Lua模塊,就像腳本一樣:調用require

既然你看起來對Lua來說是新手,我應該解釋一下。你可能在Lua腳本中看到過這樣的代碼:

require 'mycalculator' 

這不是Lua的一些特別聲明。這是一個函數調用。這僅僅是一些語法糖:在Lua

require('mycalculator') 

功能可以與NAME VALUE語法而不是NAME(...)語法被調用,但只允許你發送一個參數。參數必須是文字(或表格構造函數)。

爲了從C調用Lua require函數,您必須使用Lua堆棧。您必須使用lua_getfield(L, LUA_GLOBALSINDEX, "require");從全局表中獲取函數。然後,將字符串壓入包含要加載的模塊名稱的堆棧中。然後,您使用lua_pcall或任何Lua函數調用函數來調用它。

+0

好的。那麼我有興趣加載/需要模塊並將這個需求作爲字符串傳遞。我想傳遞一個包含所需模塊內容的字符串,以便lua永遠不會去該模塊的文件系統。這可以做到嗎? – Androider 2011-12-22 04:33:45

+0

因此,在要求加載時,我不想讓lua檢查文件系統,而是想將此模塊作爲字符串傳遞。 – Androider 2011-12-22 04:35:07

+0

所以我問的是我不想使用如下所示:path =「./path/to/a/file.lua」 – Androider 2011-12-22 04:40:08

相關問題