Перейти к содержимому
evgkul

Библиотека yieldTo: break для подпрограмм

Рекомендуемые сообщения

Данная библиотека позволяет "проскочить" несколько подпрограмм при вызове coroutine.yield (и coroutine.resume в эту же подпрограмму).

Пример:

 

 

local yieldto = require('yieldto')

local coroutines = {}

for num = 1,5 do
	coroutines[num] = coroutine.create(function()
		local message
		if num == #coroutines then
			message='IT WORKS!'
		end
		print('Entered coroutine number',num)
		if num < #coroutines then
			_,message = coroutine.resume(coroutines[num+1])
		else
			coroutine.yieldto(coroutines[1],message)
		end
		print('Reentered coroutine number',num,'Message: ',message)
		if num < #coroutines then
			coroutine.resume(coroutines[num+1])
		end
	end)
end

coroutine.resume(coroutines[1])

При вызове этого примера порядок переходов между подпрограммами следующий: 1,2,3,4,5,1,5,4,3,2,1

 

 

Скачать

Изменено пользователем evgkul

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Короутины сами по себе - довольно сложная для понимания тема (по сравнению с фанкшионами, к примеру). А тут так мало букв использовано для описания библиотеки. Попытался вкурить, что значит "проскочить" несколько подпрограмм и зачем это нужно. Не получилось. Видать, старею :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Короутины сами по себе - довольно сложная для понимания тема (по сравнению с фанкшионами, к примеру). А тут так мало букв использовано для описания библиотеки. Попытался вкурить, что значит "проскочить" несколько подпрограмм и зачем это нужно. Не получилось. Видать, старею :(

В пример глянь, там нагляднее

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Короутины сами по себе - довольно сложная для понимания тема (по сравнению с фанкшионами, к примеру). А тут так мало букв использовано для описания библиотеки. Попытался вкурить, что значит "проскочить" несколько подпрограмм и зачем это нужно. Не получилось. Видать, старею :(

Аналогично. Не смог понять, зачем это нужно. Код из разряда "а вам слабо?". Возникает смешанное чувство восхищения и недоумения.

 

Автору лайк за любопытную демонстрацию. Надеюсь на расширение описания смысла библиотеки и добавление примеров, приближенных к практике.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Библиотека проста, только её читать... ещё то удовольствие это, с таким-то стилем кода. Но это субъективно.

 

Что она делает? Попробую расписать, основываясь на том, что я прочёл.

 

Пусть будут 3 корутины. Запустим #2 из #1.

Обычно третью корутину из второй запускаем с помощью coroutine.resume — но после выскакивания из #3, управление будет в #2.

 

С помощью библиотеки же можно вызвать coroutine.resume другой корутины, при этом стопнув текущую. То есть при вызове из #2 управление будет передано в #1, откуда затем сразу же пойдёт оно в #3, а потом, когда #3 стопнется, вернётся в #1.

 

...Зачем только?

 

P. S. Пример совершенно непонятен.

Изменено пользователем Fingercomp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...