3

Lua スクリプト内に、同じ「構造」を使用する複数のライブラリがあります。たとえば、 と を含む a.lua がrequire('b')ありrequire('c')ます。b.lua と c.lua の両方に info 関数があります。b.lua は "b" を出力させ、c.lua は "c" を出力させます。a.lua では、B.lua または C.lua の info() でコルーチンを開始したいと考えています。

これは私の b.lua です:

b = {}
function b.info()
  coroutine.yield()
  print("b")
  print("b2")
end

C.lua も同様の構造ですが、ほとんどの B は C に置き換えられています。コルーチンを開始しようとするとlocal co = coroutine.create(b.info())(通常は一時停止が開始されるため、これも奇妙です)、「メタメソッド/C 呼び出しの境界を越えて譲歩しようとしています」のようなエラーが表示されます"。

4

1 に答える 1

4

coroutine.create(b.info())再開b.info する前に呼び出しますco

次のように、関数呼び出しではなく、関数を渡す必要があります

local co = coroutine.create(b.info)
coroutine.resume(co)        -- prints nothing
coroutine.resume(co)        -- prints b, b2

また

co = coroutine.wrap(b.info)
co()
co()
于 2013-10-22T15:12:05.183 に答える