Menu
Coddy logo textTech

coroutine create и resume

Часть раздела Логика и управление потоком путешествия по Lua на Coddy. Урок 49 из 54.

Теперь, когда вы понимаете, что такое coroutine, давайте узнаем, как создавать и запускать их в Lua.

Чтобы создать coroutine, используется функция coroutine.create(). Эта функция принимает обычную функцию в качестве аргумента и оборачивает её в объект coroutine. Вот базовый синтаксис:

function myTask()
    print("Hello from coroutine!")
end

local co = coroutine.create(myTask)

На этом этапе coroutine существует, но её выполнение ещё не началось. function myTask ещё не была вызвана. Чтобы фактически запустить или продолжить выполнение coroutine, используется coroutine.resume():

coroutine.resume(co)

Когда вы впервые вызываете resume() у coroutine, она начинает выполнение с начала своей function. Если coroutine выполняется до конца без приостановки, она завершается, и её нельзя возобновить снова.

Вот полный пример:

function greet()
    print("Starting...")
    print("Finishing!")
end

local co = coroutine.create(greet)
coroutine.resume(co)  -- Выводит оба сообщения

coroutine выполняется от начала до конца за один раз. В следующем уроке ты узнаешь, как приостанавливать coroutine в середине выполнения.

challenge icon

Задание

Легко

Напишите function runSimpleCoroutine, которая принимает message и возвращает вывод coroutine, печатающей это сообщение.

Создайте coroutine с помощью coroutine.create(), обернув function, которая печатает переданное сообщение. Затем используйте coroutine.resume(), чтобы выполнить coroutine. function должна вернуть message, которое было напечатано.

Логика:

  • Определите function, которая печатает параметр message
  • Создайте coroutine из этой function с помощью coroutine.create()
  • Возобновите coroutine с помощью coroutine.resume()
  • Верните message, которое было напечатано

Параметры:

  • message (строка): message, которое будет напечатано coroutine

Возвращаемое значение: message, напечатанное coroutine (строка)

Попробуйте сами

function runSimpleCoroutine(message)
    -- Напишите код здесь
end
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Lua