2013-10-22 55 views
3

在我的Lua腳本中,我有多個使用相同'結構'的庫。例如,我有a.lua什麼包含require('b')require('c')。 b.lua和c.lua都具有信息功能。 b.lua讓它打印「b」,c.lua讓它打印「c」。在a.lua中,我想用來自B.lua或C.lua的info()來啓動一個協程。Lua - 指定庫的協程

這是我b.lua:

b = {} 
function b.info() 
    coroutine.yield() 
    print("b") 
    print("b2") 
end 

C.lua有一個類似的結構,但大多數B的與C.更換時試圖啓動與local co = coroutine.create(b.info())協程(也有什麼奇怪,因爲通常它開始暫停)我得到一個錯誤,如「嘗試跨元方法/ C調用邊界產生」。

回答

4

coroutine.create(b.info())來電b.info之前恢復co

你需要傳遞一個函數,而不是一個函數調用,在

local co = coroutine.create(b.info) 
coroutine.resume(co)  -- prints nothing 
coroutine.resume(co)  -- prints b, b2 

co = coroutine.wrap(b.info) 
co() 
co() 
+0

我知道,但是這無關與錯誤,我得到。我的意思是奇怪的是它自動啓動。我的問題是我試圖產生我的協同程序出錯。 – scheurneus

+1

@scheurneus,再試一次。看到我編輯的答案。 – lhf