@ProLua

Страница 217 из 307
Andrey
25.12.2017
16:35:40
Я тут сегодня забавное поведение у луа нашел

В астериске надо объявить таблицу extensions В нее складывать контексты и экстены, контекст - вложенная в extensions таблица, а экстен уже ключ, на которую вешается функция

Суть в том, что в такую функцию попадает 2 аргумента - context и exten - то что дергает астериск.

Предположим я делаю в файле так: function abc(context, exten) end; extensions = {} extensions.default = {} extensions.default.100 = abc; Все работает на этой логике

Google
Snusmumriken
25.12.2017
16:39:05
Хе, карочи оно работает как колбеки? module = {} function module.foo(context, extension) context.foo(10) extension.foo = 20 end context:setCallbacks(module) -- типа теперь он на события будет дёргать функции из этой таблички Типа такого?

Или глобальную таблицу extensions пытается расковыривать?

Andrey
25.12.2017
16:40:18
НО! стоит мне вынести функции вынести в огтедльный файл и вгрузить его через dofile например так: template = dofile(templates.lua) extensions = {} extensions.default = {} extensions.default.100 = template.abc;

То в abc попадает только второй аргумент.

А если я в этом файле сделаю abc функцией которая возвращет функцию с тем же телом, то context снова появляется)

Snusmumriken
25.12.2017
16:41:46
Хе, вот это может быть неправильным использованием двоеточия obj:method(). Хм. Но в целом, это неправильно, на месте должны быть все аргументы.

Проверь, не делаешь ли ты чего-то неправильного. Не объявляешь/перетираешь ли ты в templates что-то глобальное и т.п.

Andrey
25.12.2017
16:44:42
Неа. Я просто вынес все функции в файл, который возвращает таблицу из них

The Dude
25.12.2017
16:44:55
Ибо можно перезатирать значения.

Лучше возвращать таблицу с ключами = ключами из скоупа модуля.

Snusmumriken
25.12.2017
16:45:23
Ибо можно перезатирать значения.
Ты хочешь setenv'ом задавать таблицу модуля вместо окружения?

Google
Snusmumriken
25.12.2017
16:45:59
Ну а в примере как раз оно. Библиотека возвращает локальную таблицу с функциями, и не делает ничо глобального.

The Dude
25.12.2017
16:46:15
https://blog.separateconcerns.com/2014-01-03-lua-module-policy.html

return { say = say, happy_greet = happy_greet, }

Лучше делать так.

Snusmumriken
25.12.2017
16:47:31
Ммм. Ты имеешь ввиду что между local function foo(x, y) ... end return {foo = foo} и local M = {} function M.foo(x, y) ... end return M есть разница?

The Dude
25.12.2017
16:47:34
Тогда у тебя появляются истинные локальные переменные и состояние.

Snusmumriken
25.12.2017
16:48:01
В первом варианте, истинными локальными работают функции.

А то что появляется состояние - это довольно часто необходимо. Особенно когда твоя библиотека - КЛАСС.

The Dude
25.12.2017
16:48:51
The first thing we can notice is that we had to modify say in Hisham's module and not in mine. But now imagine a "malicious" user does this: local bar = require "bar" local fishy_greet = function(greeting) print(greeting .. " ><>") end bar.happy_greet = fishy_greet bar.say("yay") With my module, the output would be yay!!!! :-D. With Hisham's, the output would be yay ><>: the user is allowed to monkey patch their module in a way that has an effect on functions they do not explicitly touch.

Snusmumriken
25.12.2017
16:49:51
Ну, просто я не делаю библиотек "с функциями", я делаю библиотеки с классами-фабриками. Их невозможно сделать иначе.

The Dude
25.12.2017
16:49:54
Кратко говоря.

Snusmumriken
25.12.2017
17:41:09
Кратко говоря, от одного замыкания на модуль - ничего страшного не будет, особенно учитывая кеширование на require.

Alxius
25.12.2017
20:56:50
Vyt мне вот интересно , Если я передам функции только 3 параметра, что она сделает с 4м? не тронет? (что хотелось бы) или запишет nil? function class_enemy:set(type,x2,y2,hp) self.type = type; self.x2 = x2; self.y2 = y2; self.hp = hp;

Vadim
25.12.2017
20:57:27
nil

Philipp
25.12.2017
20:57:41
Про это написано в PiL в главе про функции

Vadim
25.12.2017
20:57:55
default: local hp = hp or 100

Alxius
25.12.2017
20:57:57
так и думал спасибо)

да не дефаулт надо. а просто не трогать

Google
Philipp
25.12.2017
20:58:10
Ты еще можешь прочитать про передачу неявного количества аргументов

Alxius
25.12.2017
20:58:23
уже читал и уже даже использовал. но nil меня тогда устраивал

Vadim
25.12.2017
20:58:26
local hp = hp or self.hp

Group Butler [beta]
26.12.2017
13:46:18
Добро пожаловать в чат pro.lua, Kirill! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Kirill
26.12.2017
13:47:20
Привет, ребята, я тут новенький в lua, функция len, которая решетка, какую имеет алгоритмическую сложность? O(n)?

Или O(log n)?

Philipp
26.12.2017
13:52:00
https://stackoverflow.com/questions/18200915/performance-for-table-length-operator

Snusmumriken
26.12.2017
16:41:29
Ну кароч если нужно много раз вычислять - сохраняешь и используешь. Можешь прибавлять/убавлять единичку при добавлении/удалении значений.

Vsevolod
26.12.2017
16:49:16
это не нужно в luajit...

Philipp
26.12.2017
16:49:54
Вопрос был про Луа, не про Луажит

Group Butler [beta]
27.12.2017
11:01:26
Добро пожаловать в чат pro.lua, 79885! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Добро пожаловать в чат pro.lua, Pavel! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Pavel
27.12.2017
11:52:52
Всем привет. кто подскажет что означает ошибка lua - function: 0x8f7010

в онлайн тесте на http://rextester.com/l/lua запускаю такой скрипт тестовый

--lua 5.3 p_body = "</script><div id=\"index\"><h2>text</h2><table width</div>" for div_index in p_body:gmatch("<div id=\"index\"(.-)</div>") do print(div_index) h2_name = p_body:gmatch("<h2?.-)</h2>") print(h2_name) end

Vadim
27.12.2017
11:55:06
это не ошибка

Philipp
27.12.2017
11:55:14
Это тип данных

h2_name – функция

Aleksey
27.12.2017
11:55:21
++

Philipp
27.12.2017
11:55:25
А вернее – итератор

Google
Philipp
27.12.2017
11:55:35
gmatch возвращает итератор по вхождениям

RTFM, pls

Aleksey
27.12.2017
11:56:24
причем у тебя выше же for по итератору

Pavel
27.12.2017
11:57:02
понял. т.к. нужен for. извините. я в lua нулевой

Philipp
27.12.2017
11:57:42
p_body:match(...)

Pavel
27.12.2017
11:58:14
да. это у меня мелкий парсер html странички

пытаюсь его немного подправить...

примерно понял идею

for h2_name in p_body:gmatch("<h2?.-)</h2>") do print(h2_name) end

круто. пашет

Philipp
27.12.2017
12:02:35
:)

Pavel
27.12.2017
12:03:06
а я правильно понял что в lua нет чтото вроде visualC++ чтобы брекпоинты. отладчик

Vadim
27.12.2017
12:03:10
для кого я мейнтейню luahtmlparser?

Philipp
27.12.2017
12:03:49
для кого я мейнтейню luahtmlparser?
Он никому не нужен :)

Он никому не нужен :)
Вернее, он просто чересчур тяжелый для простых задач

Мне проще бывает свой парсер накидать, чем тащить luahtmlparser

Pavel
27.12.2017
12:05:02
парсер мне нужно чтобы из C++ кода разобрать определенную. страницу

в скрипты унес чтобы можно было быстро подменять алгоритм если поменяется сайт

Google
Pavel
27.12.2017
12:05:42
luahtmlparser - я не знал про такой )

Philipp
27.12.2017
12:05:45
Эх, когда-нибудь люди признают Луа языком общего назначения, но не сегодня :(

Кстати, @mva_name

sudo luarocks install htmlparser Installing https://luarocks.org/htmlparser-0.3.4-1.src.rock Error: Couldn't extract archive lua-htmlparser: unrecognized filename extension

Vadim
27.12.2017
12:07:38
:(

шатает ваш луарокс там себе что-то, а я потом гадай как чинить

79885
27.12.2017
12:23:20
как отлаживате нативный код байдингов с++ обьектов для луа?

Pavel
27.12.2017
12:29:39
у меня там особо нет отладки. я на С++ качаю html сырой и скидываю в lua - получаю результат в виде json

для вызова lua использую https://github.com/jeremyong/Selene

а https://github.com/msva/lua-htmlparser в один скрипт можно склеить?

что-то вроде amalgamation

Vadim
27.12.2017
12:45:49
разрешаю

Pavel
27.12.2017
12:46:16
) запустил под виндой lua-htmlparser\doc>lua53.exe sample.lua

chapters lua53.exe: sample.lua:29: attempt to index a number value (local 'e') stack traceback: sample.lua:29: in main chunk [C]: in ?

выдал вот так

счас попробу свой html ему скормить

может действительно лучше всзять готовый парсер

хм. круто все разобрал )

Страница 217 из 307