Lua coroutine.yield(-1)'是什么意思?

时间:2013-12-03 04:48:42

标签: lua coroutine

coroutine.yield(-1)是什么意思?我在这里不明白-1

代码片和输出是:

> function odd(x)
>>   print('A: odd', x)
>>   coroutine.yield(x)
>>   print('B: odd', x)
>> end
>
> function even(x)
>>   print('C: even', x)
>>   if x==2 then return x end
>>   print('D: even ', x)
>> end
>
> co = coroutine.create(
>>   function (x)
>>     for i=1,x do
>>       if i==3 then coroutine.yield(-1) end
>>       if i % 2 == 0 then even(i) else odd(i) end
>>     end
>>   end)
>
> count = 1
> while coroutine.status(co) ~= 'dead' do
>>   print('----', count) ; count = count+1
>>   errorfree, value = coroutine.resume(co, 5)
>>   print('E: errorfree, value, status', errorfree, value, coroutine.status(co))
>> end
----    1
A: odd  1
E: errorfree, value, status     true    1       suspended
----    2
B: odd  1
C: even 2
E: errorfree, value, status     true    -1      suspended
----    3
A: odd  3
E: errorfree, value, status     true    3       suspended
----    4
B: odd  3
C: even 4
D: even         4
A: odd  5
E: errorfree, value, status     true    5       suspended
----    5
B: odd  5
E: errorfree, value, status     true    nil     dead
>

2 个答案:

答案 0 :(得分:2)

传递给相应coroutine.yield的任何参数都由coroutine.resume返回。因此-1 coroutine.yield(-1)中的coroutine.yield(x)没有什么特别之处,它与函数odd(x)中的counter类似。

2i3---- 2 B: odd 1 C: even 2 E: errorfree, value, status true -1 suspended 时执行。相应的输出是:

ture

表示没有错误的-1后,请在此处查看coroutine.yield(-1)?这是调用coroutine.resume时的值,最终为coroutine.resume的返回值。

出于类似的原因,1的其他返回值为35coroutine.yield(x),均来自odd(x)函数{{1}} 1}}。

答案 1 :(得分:1)

coroutine.yield(···)

暂停执行调用协程。协程不能运行C函数,元方法或迭代器。 任何屈服参数都会作为额外结果传递给恢复。

http://www.lua.org/manual/5.1/manual.html#pdf-coroutine.yield

换句话说,-1可能是任何东西,甚至是多个值,以及如何使用这些值取决于程序员。