0

私はLuaテーブルを持っていますt。これを繰り返します。

for k, v in pairs(t) do
    b = false
    my_func(v)
end

bグローバル変数がに変更されるまで反復を一時停止する必要がありますtrue

Luaは可能ですか?

4

1 に答える 1

6

コルーチンを使用していない限り、コードで値を変更せずにLua変数の値を変更するという概念はありません。したがって、起こり得ないことが起こるまで一時停止します。Luaは本質的にシングルスレッドです。

前に述べたように、コルーチンを使用してこれを行うことができますが、それに応じてコードを変更する必要があります。

function CoIterateTable(t)
  for k, v in pairs(t) do
    b = false
    my_func(v)

    while(b == false) do coroutine.yield() end
  end
end

local co = coroutine.create(CoIterateTable)

assert(co.resume(t))
--Coroutine has exited. Possibly through a yield, possibly returned.
while(co.running()) do
  --your processing between iterations.
  assert(co.resume(t))
end

反復間で参照されるテーブルを変更してtも、有用なことは何も行われないことに注意してください。

于 2012-04-09T01:13:52.327 に答える