coroutine.create と resume
CoddyのLuaジャーニー「ロジックと制御フロー」セクションの一部。レッスン 49/54。
コルーチンとは何かを理解したところで、Luaで実際にコルーチンを作成して実行する方法を学びましょう。
コルーチンを作成するには、coroutine.create()関数を使用します。この関数は通常の関数を引数として受け取り、それをコルーチンオブジェクトにラップします。基本的な構文は次のとおりです。
function myTask()
print("Hello from coroutine!")
end
local co = coroutine.create(myTask)この時点では、コルーチンは存在していますが、まだ実行を開始していません。関数 myTask は呼び出されていません。コルーチンの実行を実際に開始または継続するには、coroutine.resume() を使用します。
coroutine.resume(co)コルーチンに対して初めて resume() を呼び出すと、その関数の先頭から実行が開始されます。コルーチンが一時停止せずに最後まで実行されると、完了し、再度再開することはできません。
完全な例を次に示します。
function greet()
print("Starting...")
print("Finishing!")
end
local co = coroutine.create(greet)
coroutine.resume(co) -- 両方のメッセージを出力しますcoroutineは最初から最後まで一気に実行されます。次のレッスンでは、実行の途中でcoroutineを一時停止させる方法を学びます。
チャレンジ
簡単runSimpleCoroutineというfunctionを記述します。このfunctionはmessageを受け取り、そのmessageを出力するcoroutineからの出力を返します。
coroutine.create()を使用して、指定されたmessageを出力するfunctionをラップしたcoroutineを作成します。次に、coroutine.resume()を使用してcoroutineを実行します。functionは出力されたmessageを返す必要があります。
ロジック:
- messageパラメーターを出力するfunctionを定義する
coroutine.create()を使用して、そのfunctionからcoroutineを作成するcoroutine.resume()を使用してcoroutineを再開する- 出力されたmessageを返す
パラメーター:
message(文字列):coroutineによって出力されるmessage
戻り値:coroutineによって出力されたmessage(文字列)
自分で試してみよう
function runSimpleCoroutine(message)
-- ここにコードを書いてください
end
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックと制御フローのすべてのレッスン
自分で練習してみよう: Luaオンラインコンパイラ