2016-11-23 7 views
1

私は次のようになり、次のコルーチンとテーブルを持っている:私は履歴書を呼ばれると予想されるようにコルーチンの戻り値に "n"とは何ですか?

co = coroutine.create(function(...) 
    for item in pairs(table.pack(...)) do 
    coroutine.yield(item) 
    end 
    coroutine.yield('Evil') 
    return 'NO!' 
end) 

values = {1, 2, 3, 4, 5, 6} 

、それは価値が得られると、突然nは何の略n

Evil
> coroutine.resume(co, table.unpack(values)) 
true 1 
> coroutine.resume(co, table.unpack(values)) 
true 2 
> coroutine.resume(co, table.unpack(values)) 
true 3 
> coroutine.resume(co, table.unpack(values)) 
true 4 
> coroutine.resume(co, table.unpack(values)) 
true 5 
> coroutine.resume(co, table.unpack(values)) 
true 6 
> coroutine.resume(co, table.unpack(values)) 
true n -- Here we have n 
> coroutine.resume(co, table.unpack(values)) 
true Evil 
> coroutine.resume(co, table.unpack(values)) 
true NO! 

をもたらします?

+1

サイドノート: 'coroutine.resume'へのあなたのすべての呼び出しにおける' table.unpack(values) 'は、' coroutine.yield 'の戻り値で何もしないので何もしません'。 –

答えて

2

Lua 5.2(おそらく)のように、table.pack(){...}として機能しますが、アイテム数を格納するフィールド 'n'を追加します。それはあなたが得る「n」キーです。

値だけではなく、キーだけをリストしていることに注意してください。

「n」にしたくない場合は、pairs()の代わりにipairs()を使用してください。

関連する問題