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
>
答案 0 :(得分:2)
传递给相应coroutine.yield
的任何参数都由coroutine.resume
返回。因此-1
coroutine.yield(-1)
中的coroutine.yield(x)
没有什么特别之处,它与函数odd(x)
中的counter
类似。
当2
为i
且3
为---- 2
B: odd 1
C: even 2
E: errorfree, value, status true -1 suspended
时执行。相应的输出是:
ture
表示没有错误的-1
后,请在此处查看coroutine.yield(-1)
?这是调用coroutine.resume
时的值,最终为coroutine.resume
的返回值。
出于类似的原因,1
的其他返回值为3
,5
和coroutine.yield(x)
,均来自odd(x)
函数{{1}} 1}}。
答案 1 :(得分:1)
coroutine.yield(···)
暂停执行调用协程。协程不能运行C函数,元方法或迭代器。 任何屈服参数都会作为额外结果传递给恢复。
http://www.lua.org/manual/5.1/manual.html#pdf-coroutine.yield
换句话说,-1
可能是任何东西,甚至是多个值,以及如何使用这些值取决于程序员。