2013-10-22 7 views
3

내 루아 스크립트 내에서 동일한 '구조'를 사용하는 여러 라이브러리가 있습니다. 예를 들어, require('b')require('c')이 포함 된 .lua가 있습니다. b.lua와 c.lua는 정보 기능을 가지고 있습니다. b.lua는 "b"를 출력하고 c.lua는 "c"를 출력하게합니다. a.lua에서 나는 B.lua 또는 C.lua에서 info()와 함께 coroutine을 시작하려고합니다.루아 - 코 루틴을위한 라이브러리 지정

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

C.lua은 비슷한 구조를 가지고, 또한 때문에 보통 이상한 무엇 local co = coroutine.create(b.info())와 코 루틴을 (를 시작하려고 할 때 B 형의 대부분은 C.로 대체됩니다 :

내 b.lua입니다 일시 중지됨) "metamethod/C-call 경계를 넘어서 양보하려고합니다"와 같은 오류가 발생합니다.

답변

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