Здравствуйте, гость ( Вход | Регистрация )
Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
---|---|---|---|---|---|
15.1.2015, 10:24 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
когда ты пишешь Код local function SerializeToString(tTable, sTableName, sTab) ты сразу определяешь имя функции, и это имя может сразу использоваться внутри функции но когда ты пишешь Код local SerializeToString = function(tTable, sTableName, sTab) ты сначала определяешь анонимную функцию (функцию без имени), выполняешь её, и только потом присваиваешь переменной SerializeToString эту функцию. То есть присвоение происходит уже после выполнения тела анонимной функции, поэтому если в теле используется переменная SerializeToString, то она еще не определена: Код local f1 = function() print(f1) end local function f2() print(f2) end f1() -- nil f2() -- function: 0x803f00 |
MIKHAIL | ||
20.10.2014, 10:24 |
Способы Повышения Производительности методы оптимизации lua кода |
Да, действительно, find - это лишнее, ведь у нас остался 1 символ. Простое сравнение уместнее. |
Iskandark | ||
31.8.2014, 9:38 |
Проблемы с общением хаб--клиент |
Обратите внимание на характеристику QuickList. Если хаб поддерживает данную характеристику, и вы отсылаете её на хаб, то последовательность входа немного другая. В частности, на хаб не следует отсылать команду $ValidateNick. см. Последовательность входа на хаб, который поддерживает характеристику QuickList |
keyviewer | ||
4.8.2014, 10:18 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Ничего непонятно. В Lua по ссылке передаются только table, function, thread и userdata Строки не передаются по ссылке, а копируются! Код local str = "str" local t = {[1] = "test"} local tData = { [str] = str, ["t"] = t } print(tData["t"][1]) -- "test" t[1] = "test1" print(tData["t"][1]) -- "test1", так как таблица t передана по ссылке в таблицу tData print(tData[str]) -- "str" str = "str1" print(tData[str]) -- nil, так как в таблице tData нет ключа "str1" (строки всегда копируются) |
MIKHAIL | ||
3.8.2014, 12:40 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Перехватить копирование откуда и куда? Метод метатаблицы __newindex отвечает за вставку в таблицу данных для НОВОГО ключа. Другими словами, если ключ в таблице уже существует, то присвоение этому ключу нового значения НЕ повлечет за собой вызов метода __newindex. Пример: Код local str = "copying" local tData = { [1] = 1 } setmetatable(tData, { __newindex = function(self, key, value) print(key, value) rawset(self, key, value) end }) tData[str] = str -- сработает метод __newindex, так как в таблице нет ключа str tData[str] = "str" -- метод __newindex НЕ сработает, так как в таблице уже есть ключ str Вариант обхода этого - это присвоение значения nil: Код tData[str] = str -- сработает метод __newindex, так как в таблице нет ключа str tData[str] = nil -- затираем предыдущее значение tData[str] = "str" -- сработает метод __newindex, так как в таблице нет ключа str Другой вариант (возможно более грамотный) - это хранить данные не в текущей таблице, а в таблице метатаблицы : Код local str = "copying" local tData = {} setmetatable(tData, { tTable = {}; -- таблица для хранения данных __newindex = function(self, key, value) print(key, value) getmetatable(self).tTable[key] = value end; __index = function(self, key) return getmetatable(self).tTable[key] end; }) tData[1] = 1 tData[str] = str tData[str] = "str" |
MIKHAIL | ||
1.8.2014, 15:04 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Это делается при помощи метатаблицы: Код local str = "copying" local tbl = {[1] = "one_more_copying"} local tData = { [1] = 1 } setmetatable(tData, { __newindex = function(self, key, value) print(key, value) -- печатаем устанавливаемые ключ и значение rawset(self, key, value) -- непосредственная установка значения end }) tData[str] = str tData[tbl[1]] = tbl[1] |
MIKHAIL | ||
13.7.2014, 9:42 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Код assert(loadstring("tData = {\"some_data\"}"))() print(tData[1]) -- some_data |
MIKHAIL | ||
26.3.2014, 15:40 |
Mysql win32 - API 2 | Самая распространённая база данных |
К сожалению в отличие от Lua, в котором есть GC, СИ не может похвастаться такой фичей, поэтому для освобождения памяти нужно вызывать со стороны Lua закрытие курсора. На пару вызовов закрытие практически никак не скажется, но если курсор юзать в каком-нибудь цикле, то может рано или поздно закончиться память |
MIKHAIL | ||
9.3.2014, 20:15 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Никак. Тип userdata не имеет какой-то определенной структуры в Lua. Структура определяется программистом при помощи метатаблиц. Цитата Тип userdata (пользовательские данные) позволяет хранить любые данных из C в переменных Lua. Значение этого типа является ссылкой на блок физической памяти и не имеет предопределенных операций в Lua, за исключением присваивания и проверки на равенство |
MIKHAIL | ||
2.12.2013, 9:26 |
Protector API2 | бот всё в одном |
Код --AutoRegCheck(tUser) |
Dani_Filth | ||
27.6.2013, 19:48 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
lfs в помощь http://mydc.ru/topic1970.html |
MIKHAIL | ||
30.3.2013, 15:36 |
Способы Повышения Производительности методы оптимизации lua кода |
Ну да, что в Lua идет копирование всей строки при конкатенации, что в коде - тоже копирование всей строки. Действительно, в Lua кроме копирования при каждом создании строки ещё и рассчитывается её хеш код. Другое дело что в хабе лишнее копирование строк можно было бы исключить, что, однако, PPK не делает |
MIKHAIL | ||
24.3.2013, 21:10 |
Способы Повышения Производительности методы оптимизации lua кода |
проблема не в символе, а в лишнем копировании данных не смотрел реализацию функции UserSendCharDelayed, но возможно стоило написать так: Код UserSendCharDelayed(u, sData, szLen); if(sData[szLen-1] != '|') { UserSendCharDelayed(u, "|", 1); } |
MIKHAIL | ||
19.3.2013, 9:57 |
phazeus ddos ddos phazeus |
В русхаб будет встроена защита от отправки через скрипт соответствующих команд ддоса. Это мой ответ на борьбу против ддоса. |
Ksan, dka, KT315, Saymon21, Aлзим, mod | ||
18.3.2013, 22:18 |
Ddos Информация к размышлению |
Не, ну сплошной оффтоп. Ни одного слова по делу нету. Успокойтесь уже. Закрыто. |
Nickolya | ||
18.3.2013, 22:04 |
Ddos Информация к размышлению |
мне уже надоедает говно из темы убирать! прекращаем говно лить! |
Nickolya | ||
18.3.2013, 10:15 |
Предложения для развития |
Функции Core.RestartScript и Core.StartScript отлавливают на данный момент исключительно синтаксические ошибки. Runtime ошибки они не отлавливают. Возможно отлов runtime ошибок этими функциями в событии OnStartup будет реализован |
Saymon21 | ||
12.3.2013, 15:26 |
Способы Повышения Производительности методы оптимизации lua кода |
Это не единственный грабли. Если присмотреться к исходникам, то там их можно очень много найти. Я уже не говорю о "макаронности" кода. По всей видимости у них действует правило: "Работает - не трогай!", и поэтому рефакторинг кода никогда не делается. |
мамин_парень | ||
28.2.2013, 21:39 |
Вопросы по RusHub Технические вопросы |
Ничего не остановил, просто релизы реже стали выходить. |
Otshelnik-Fm | ||
6.2.2013, 8:52 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
%s равносильно следующему регулярному выражению: Код [ \f\n\r\t\v] Другими словами, %s это набор символов, который кроме пробела включает ещё и другие символы. Конечно, если ожидается, что там всегда будет пробел, то нет смысла писать %s, так как, во-первых, это незначительная, но все же оптимизация, во-вторых, с пробелом более наглядно и понятно. |
MIKHAIL | ||
2.2.2013, 14:18 |
Strong DC не сохраняет настройки |
Скачать какую-нибудь другую версию. |
мамин_парень | ||
23.1.2013, 9:58 |
PtokaX в OpenWrt (Linux) Ребята как собрать под эту систему? |
Ну и как думаете сколько пользователей сможет выдержать такое хилое железо? По мне так хаб на роутере это бесперспективное решение. |
мамин_парень | ||
22.12.2012, 18:37 |
Вопрос по регулярным выражениям (не относится к lua) |
Логично, что регулярное выражение [a-zA-Zа-яА-Я ]+ захватить всё до цифр. В данном случае нельзя регулярным выражением захватить все, кроме подстроки. Нужно либо захватывать по частям, например, так: ([a-zA-Zа-яА-Я ]+)\d*([a-zA-Zа-яА-Я ]+) и после этого сконкатенировать два полученных отрезка, либо же нужно использовать какую-то функцию, которая делает замену по регулярному выражению. Что-то типа: Код ReplaceAll(str, "[\d]*", "") если такая есть в приведенным тобою языке. |
Accelerator | ||
15.10.2012, 9:06 |
Несколько Слов О Захватах И Регулярных Выражениях исключительно для разработчиков |
\" - это Lua экранирование, так как кавычка является символом синтаксиса Lua (в отличие от символа %, который является экранирующим символом в регулярном выражении). Захватить символ можно скобками: Код str:find"(\")" можно написать так: Код str:find'(")' То есть, экранировать кавычки нужно в том случае, когда эти же кавычки обозначают строку. |
GULAM33 | ||
5.10.2012, 9:19 |
Скрипты API 2. Защита хаба. Базы TTH Скрипты защиты от спама, флуда, рекламы, порно |
компактнее написать так: Код "[0-9].[1-9][0-9].[1-9][0-9].[0-9]" |
GULAM33 | ||
10.7.2012, 10:49 |
RusHub Кроссплатформенный консольный DC хаб |
rushub v 2.3.10 lua plugin v 2.9 Fixed: Обновлен Zlib 1.2.7. Fixed: Обновлен Lua 5.1.5. Fixed: Устранены некоторые незначительные баги, утечки, глюки. Fixed: Рефакторинг кода и частичная поддержка стандарта ISO C++. |
Nickolya, Setuper, ShadoWx, CrazyKiller, AfLc, werwolf.zw | ||
29.5.2012, 16:59 |
Verlihub Описание |
CDM отладчик в руки и вперёд! |
Lamo | ||
29.5.2012, 16:58 |
вопрос по NMDC. . |
Вместе с EXTENDEDPROTOCOL. Неужели так сложно проверить и сравнить с тем, что возвращает клиент? |
Lamo | ||
23.5.2012, 11:09 |
Вопросы по RusHub Технические вопросы |
то, что в транке действительно на 64 битном линуксе не собирается (чуть позже будет исправлено). 2.3.8 на x64 должен собираться! |
Axiator | ||
21.5.2012, 12:19 |
С Днюхой Тебя! поздравления |
Присоединяюсь к поздравлениям Успехов и удачи во всём! |
Nickolya | ||
|
Сейчас: 22.11.2024, 14:55 |