[Logo]
LUA Форум
  [Search] Поиск   [Recent Topics] Последние темы   [Hottest Topics] Горячие темы   [Members]  Список участников   [Groups] На главную страницу 
[Register] Регистрация / 
[Login] Вход 
require и package.loaded  XML
Индекс форума » LUA: Общие вопросы
Автор Сообщение
zarg
Новичок

Зарегистрирован: 31/07/2008 10:49:01
Сообщений: 5
Оффлайн

все наверное видели модуль magnet для fcgi, дописываю его под свои нужды и вот появились вопросы.

1. если require в коде был сделан с ошибкой то повторно lua не даёт сделать такой же require , что верно но не в моём случае. как обнулить package.loaded ?
={} не катит.

2. я правильно понимаю что с помощью coroutine можно сделать асинхронные скрипты? типа пока выполняется запрос к мемкешеду у первого скрипта , происходит переключение на второй скрипт и выполняется его код ? или я что-то лишнее придумываю


XNut
ГУРУ
[Avatar]

Зарегистрирован: 15/04/2008 12:12:47
Сообщений: 106
От: Россия, Липецк
Оффлайн

1. Зависит от версии Lua, надо смотрети исходники
2. Что вы имеете в виду?
zarg
Новичок

Зарегистрирован: 31/07/2008 10:49:01
Сообщений: 5
Оффлайн

XNut wrote:1. Зависит от версии Lua, надо смотрети исходники

на предмет чего?
2. Что вы имеете в виду?

ну вот есть например софт , у которого добавлена поддержка lua. можно ли сделать так чтобы софт не ждал завершения работы луа кода, а продолжал работать ? (без тредов). например по типу epoll, разделяя машинное время.
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.


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 никто не смотрел?
smz
ГУРУ

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 249
Оффлайн

zarg wrote:это все хорошо, но я могу и не знать какие пакеты загружены с ошибкой

Можно сделать итерацию по содержимому package.loaded, проверяя тип данных и присваивая nil, если не таблица и не функция.
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

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

zarg
Новичок

Зарегистрирован: 31/07/2008 10:49:01
Сообщений: 5
Оффлайн

1. выяснить конечно, просот вы написали про либо таблица либо функция, а тут true
2. учту, спасибо
smz
ГУРУ

Зарегистрирован: 14/03/2008 13:23:00
Сообщений: 249
Оффлайн

zarg wrote:1. выяснить конечно, просот вы написали про либо таблица либо функция, а тут true

Это всё правильно, в вашем примере и должно быть true, поскольку модуль 1.lua ничего не возвращает. Обычные "нормальные" модули возвращают (т.е. return) либо таблицу с функциями, либо функцию.
VBL
Новичок

Зарегистрирован: 05/08/2008 17:30:15
Сообщений: 1
Оффлайн

zarg wrote:
2. я правильно понимаю что с помощью coroutine можно сделать асинхронные скрипты?

Нет, но сопрограммы позволяют организовать приостановку выполнения функции, выход из нее, а затем позднее продолжение ее выполнения. Это полезно в системах, где нельзя надолго захватывать управление, для квантования работы продолжительных алгоритмов. При этом, Lua позволяет передавать данные через параметры и возвращаемые значения при каждой приостановке и при каждом продолжении, что обеспечивает высокую гибкость взаимодействия вызывающей программы и сопрограммы.
 
Индекс форума » LUA: Общие вопросы
Перейти:   
Powered by JForum 2.1.8 © JForum Team