Перейти к публикации
Форум - ComputerCraft
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
  • Like 1

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


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

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

  • Like 1

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


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

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

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

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


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

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

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

 

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

  • Like 2

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


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

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

 

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

 

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

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

 

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

 

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

 

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

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

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×