[Logo] LUA Форум
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Messages posted by: z00n
Forum Index » Profile for z00n » Messages posted by z00n
Author Message
http://luaforge.net/projects/luainterface/
Я не уверен, что я точно понял, чего вам хочется. Вот: функция stream_maker делает бесконечный ленивый поток поток натуральных чисел, а функция lift лифтит две скалярные унарные функции и исходный поток до бесконечного потока пар значений функций.



печатает:
smz wrote:Ну а теперь - третий тест: такой же, как предыдущие два, только pattern = ".-"
gmatch2 - работает неправильно.
gmatch3 - больше не проверяю.
[перешёл в режим read-only для этой темы ]


Я готов признать победу метода с определением длины Особенно в условиях того, что узнать о том что и когда возвращает string.find из документации нельзя.
smz wrote:
Не работает ни на одном из 2-х тестов. Вот что печатается:


А, ну это фича - поскольку итератор stateless он по контракту должен на первой позиции вернуть индекс, который должен быть передан итерирующей функции на следующей итерации, т.е. правильно его вызывать нужно примерно как pairs:
smz wrote:z00n
Это уже лучше, но gmatch3 всё ещё не работает.


Странно, на каком тесте?

P.S. Возможно вы потеряли local IMPOSSIBLE_INDEX = math.pi - отредактирую исходник
smz wrote:z00n

Попробуй string.gmatch, а затем обе свои по очереди.


Второй тест. Оказалось, что string.find, если паттерн матчится с empty string (например "%w*" или ".?"), ведет себя контринтуитивно (string.gmatch, кстати, тоже - string.gmatch("aaa","%w*") матчится 2 раза, а не интуитивный 1). Я не видел где это документировано, и собственно в изначальном коде меня и заинтересовало зачем там столько заплаток типа limit=1+#subj и start = (e < s) and s+1 or e+1.

Итак если (e < s) то:
а) мы сматчили пустую строку
б) нам нужно выйти из следующего цикла

Код с заплатками:
По моему можно слегка упростить. Где был бесконечный цикл?


Вообще, конечно полезно знать как писать итераторы.
Итератор для generic for это функция, которая возвращает 3 значения:
-1- the iterator function;
-2- the invariant state;
-3- the initial value for the control variable.

Iterator function - это грубо говоря функция Next, а 2 и 3 - аргументы для нее, поэтому если ваша Next - stateful, аргументы можно опустить.
Функция Next в свою очередь должна возвращать key-value пару, что легко предположить из того, как мы обычно используем generic for.

Предположим у нас нет string.gmatch, а есть только string.find, тогда:


Чтобы убрать порнографию с PAT можно сделать так:


Stateful итераторы хорошо писать с помощью coroutines.
smz wrote:
z00n wrote:Мне тут попалась под руку утилита UPX (http://upx.sourceforge.net/) для сжимания бинарников - в результате очередная lua51.dll, размер 49.5 K c парсером.

Только без обиды:
Зачем эти детские игры?

Если это ко мне вопрос, то без понятия - и мне даже не интересно.
Мне тут попалась под руку утилита UPX (http://upx.sourceforge.net/) для сжимания бинарников - в результате очередная lua51.dll, размер 49.5 K c парсером.
Scaint wrote:Здравствуйте. Я использую Lua в своем игровом движке. Скрипт вызывается в основном цикле программы, т.е. при рендеринге каждого кадра.

lua_getglobal(ls.State, 'main');
...
lua_pcall(ls.State, ArgCount, 1, 0);

Получается каждый раз происходит поиск функции по имени в таблице глобальных переменных. Это не лучшим образом сказывается на производительности, особенно при большом количестве переменных.

Поиск в таблице по имени занимает ~ 30 наносекунд. Поскольку это hash-таблица, то сложность O(1) - т.е. не зависит от количества глобальных переменных.

Scaint wrote:У меня возник вопрос, можно ли вызывать функцию скрипта по заранее полученому индексу или адресу?

Да, конечно см. luaL_ref, как пользоваться написано в PIL: http://www.lua.org/pil/27.3.2.html
smz wrote:
Но корректно работать не будет, так как:
1. Ф-ции lua_loadfile не существует - есть ...

Спасибо, это я спросонья

Вот, написал на PB упрощенный вариант - работает совершенно корректно, откопилированный вариант для экспериментов прилагается.

Я не знаю PowerBasiс'а, но с точки зрения API такой код должен работать корректно
jangle wrote:
Проблема частично устранилась заменой Lua.dll на новую версии 5.1.3
Частично, потому что на вершине стека все-таки стали появлятся сообщения об ошибках, однако например в таких случаях:



выдается неинформативная строка

attempt to call a nil value

Нет номера строки с ошибкой!


Странно, здесь нет попытки вызова nil value - здесь мы имеем банальную синтаксическую ошибку - expression in statement position.
Вот что говорит интерпретатор lua:
Т.е. луа ожидает , и заметьте, номер строки выводится.
А ваше сообщение attempt to call a nil value скорее всего относится к способу, которым вы обрабатываете ошику.
Приведите код, которым вы вызываете луа.
al wrote:
Strijar wrote:http://luaforge.net/projects/luaposix/

Сдается мне что библиотека совсем не адаптирована под win32.


Звучит довольно забавно, поскольку POSIX совместимость и есть коренное отличие WIN ot *NIX Практически единственный способ заставить заработать posix программу под win - Cygwin - т.е вы должны скомпилировать ее Cygwin версией gcc и таскать с собой мегабайтную cygwin1.dll.

Но если вам просто нужен sleep под win32 то нужно как-то так:
 
Forum Index » Profile for z00n » Messages posted by z00n
Go to:   
Powered by JForum 2.1.9 © JForum Team