| Автор |
Сообщение |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 31/07/2008 10:54:01
|
zarg
Новичок
Зарегистрирован: 31/07/2008 10:49:01
Сообщений: 5
Оффлайн
|
все наверное видели модуль magnet для fcgi, дописываю его под свои нужды и вот появились вопросы.
1. если require в коде был сделан с ошибкой то повторно lua не даёт сделать такой же require , что верно но не в моём случае. как обнулить package.loaded ?
={} не катит.
2. я правильно понимаю что с помощью coroutine можно сделать асинхронные скрипты? типа пока выполняется запрос к мемкешеду у первого скрипта , происходит переключение на второй скрипт и выполняется его код ? или я что-то лишнее придумываю
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 31/07/2008 11:02:55
|
XNut
ГУРУ
![[Avatar]](/forum/images/avatar/7f39f8317fbdb1988ef4c628eba02591.jpg)
Зарегистрирован: 15/04/2008 12:12:47
Сообщений: 106
От: Россия, Липецк
Оффлайн
|
1. Зависит от версии Lua, надо смотрети исходники
2. Что вы имеете в виду?
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 31/07/2008 12:33:07
|
zarg
Новичок
Зарегистрирован: 31/07/2008 10:49:01
Сообщений: 5
Оффлайн
|
XNut wrote:1. Зависит от версии Lua, надо смотрети исходники
на предмет чего?
2. Что вы имеете в виду?
ну вот есть например софт , у которого добавлена поддержка lua. можно ли сделать так чтобы софт не ждал завершения работы луа кода, а продолжал работать ? (без тредов). например по типу epoll, разделяя машинное время.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 31/07/2008 13:05:14
|
smz
ГУРУ
Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 249
Оффлайн
|
zarg wrote:1. если require в коде был сделан с ошибкой то повторно lua не даёт сделать такой же require , что верно но не в моём случае. как обнулить package.loaded ?
={} не катит.
Если при вызове require'foo' произошла ошибка, то можно сделать так:
zarg wrote:2. я правильно понимаю что с помощью coroutine можно сделать асинхронные скрипты?
Нет, асинхронные скрипты при помощи coroutine сделать нельзя, всё происходит под управлением скрипта явным образом, смотрите справку по yield и resume.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 31/07/2008 13:32:38
|
zarg
Новичок
Зарегистрирован: 31/07/2008 10:49:01
Сообщений: 5
Оффлайн
|
smz wrote:
zarg wrote:1. если require в коде был сделан с ошибкой то повторно lua не даёт сделать такой же require , что верно но не в моём случае. как обнулить package.loaded ?
={} не катит.
Если при вызове require'foo' произошла ошибка, то можно сделать так:
это все хорошо, но я могу и не знать какие пакеты загружены с ошибкой
smz wrote:
zarg wrote:2. я правильно понимаю что с помощью coroutine можно сделать асинхронные скрипты?
Нет, асинхронные скрипты при помощи coroutine сделать нельзя, всё происходит под управлением скрипта явным образом, смотрите справку по yield и resume.
а модуль luaasync никто не смотрел?
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 31/07/2008 13:46:55
|
smz
ГУРУ
Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 249
Оффлайн
|
zarg wrote:это все хорошо, но я могу и не знать какие пакеты загружены с ошибкой
Можно сделать итерацию по содержимому package.loaded, проверяя тип данных и присваивая nil, если не таблица и не функция.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 31/07/2008 14:28:17
|
zarg
Новичок
Зарегистрирован: 31/07/2008 10:49:01
Сообщений: 5
Оффлайн
|
smz wrote:
zarg wrote:это все хорошо, но я могу и не знать какие пакеты загружены с ошибкой
Можно сделать итерацию по содержимому package.loaded, проверяя тип данных и присваивая nil, если не таблица и не функция.
$cat 2.lua $cat 1.lua $lua 2.lua тру?
Это сообщение было редактировано 2 раз. Последнее обновление произошло в 31/07/2008 18:48:02
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 31/07/2008 14:45:08
|
smz
ГУРУ
Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 249
Оффлайн
|
zarg wrote:
$cat 2.lua
require "1";
print (tostring(package.loaded["1"]))
$cat 1.lua
function xxx(x,d)
print(d.."->"..x)
end
xxx(1,15);
$lua 2.lua
15->1
true
тру?
1. Вы хотите что-то выяснить, или просто поговорить?
2. Следует пользоваться кнопкой Code, хотя бы из уважения к другим пользователям.
Это сообщение было редактировано 1 раз. Последнее обновление произошло в 31/07/2008 14:45:38
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 31/07/2008 19:47:14
|
zarg
Новичок
Зарегистрирован: 31/07/2008 10:49:01
Сообщений: 5
Оффлайн
|
1. выяснить конечно, просот вы написали про либо таблица либо функция, а тут true
2. учту, спасибо
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 31/07/2008 20:23:45
|
smz
ГУРУ
Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 249
Оффлайн
|
zarg wrote:1. выяснить конечно, просот вы написали про либо таблица либо функция, а тут true
Это всё правильно, в вашем примере и должно быть true, поскольку модуль 1.lua ничего не возвращает. Обычные "нормальные" модули возвращают (т.е. return) либо таблицу с функциями, либо функцию.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 05/08/2008 17:42:53
|
VBL
Новичок
Зарегистрирован: 05/08/2008 17:30:15
Сообщений: 1
Оффлайн
|
zarg wrote:
2. я правильно понимаю что с помощью coroutine можно сделать асинхронные скрипты?
Нет, но сопрограммы позволяют организовать приостановку выполнения функции, выход из нее, а затем позднее продолжение ее выполнения. Это полезно в системах, где нельзя надолго захватывать управление, для квантования работы продолжительных алгоритмов. При этом, Lua позволяет передавать данные через параметры и возвращаемые значения при каждой приостановке и при каждом продолжении, что обеспечивает высокую гибкость взаимодействия вызывающей программы и сопрограммы.
|
|
|
 |
|
|