2
루아 코드의 아주 단순한 부분이 있습니다. 루아 코드는 루틴 코드가 어떻게 작동 하는지를 가르치면서 작성했습니다.왜이 간단한 루아 코 루틴은 작동하지 않습니까?
coroutine.wrap (F)
신체 F와 함께, 새로운 코 루틴을 작성 : 나는 coroutine.wrap있어 때까지
가 나는 spec 상태 괜찮습니다. f는 루아 함수 여야합니다. 호출 할 때마다 코 루틴 을 다시 시작하는 함수를 반환합니다. 함수에 전달 된 모든 인수 은 추가 인수로 작동하여 다시 시작합니다. 첫 번째 부울 을 제외하고는 동일한 값이 resume에서 반환됩니다. 오류가 발생하면 오류가 전파됩니다.
그러나이 코드 :
Enumeration = {}
Enumeration.Create = function(generator)
return coroutine.wrap(generator, coroutine.yield)
end
local function TestEnumerator(yield)
yield(1) --ERROR HERE
yield(2)
yield(3)
end
local enumerator = Enumeration.Create(TestEnumerator)
local first = enumerator()
local second = enumerator()
local third = enumerator()
print (first, second, third)
은 (I 위에서 표시 한 라인에서) 그 수율 불만을 전무하다. 내가 이해하는 바와 같이, yield는 coroutine.wrap에 전달 된 두 번째 인수 여야합니다. 그래서 어디서 잘못 될까요?
정말 확실한 해결책,
Enumeration.Create = function(generator)
local iter = coroutine.wrap(generator, coroutine.yield)
return function()
return iter(coroutine.yield)
end
end
바, 한 번 당신이 그렇게 간단하게 내가 설명서를 잘못 읽었습니다. – Martin
보다 균일 한 동작을 얻으려면 래핑 된 함수의 협업이 필요하지만 시작하자 마자 생성하면 Create는 한 번만 래핑하여 yield를 설정합니다. – lhf