Здравствуйте, гость ( Вход | Регистрация )
Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
---|---|---|---|---|---|
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 | ||
![]() |
Сейчас: 4.4.2025, 21:32 |