Menu
Coddy logo textTech

coroutine create и resume

Часть раздела Logic & Flow путешествия по Lua на Coddy — урок 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)  -- Выводит оба сообщения

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

challenge icon

Задание

Легко

Напишите функцию runSimpleCoroutine, которая принимает message и возвращает результат работы сопрограммы (coroutine), которая выводит это сообщение.

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

Логика:

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

Параметры:

  • message (string): Сообщение, которое должно быть выведено сопрограммой

Возвращает: Сообщение, которое было выведено сопрограммой (string)

Шпаргалка

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

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

local co = coroutine.create(myTask)

Чтобы запустить или продолжить выполнение сопрограммы, используйте coroutine.resume():

coroutine.resume(co)

Полный пример:

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

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

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

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

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

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

Все уроки раздела Logic & Flow