myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
История благодарностей участнику Setuper. Спасибо сказали: 1708
Дата поста: В теме: За сообщение: Спасибо сказали:
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


Другой вариант (возможно более грамотный) - это хранить данные не в текущей таблице, а в таблице метатаблицы big_smile.gif :
Код
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 закрытие курсора.
На пару вызовов закрытие практически никак не скажется, но если курсор юзать в каком-нибудь цикле, то может рано или поздно закончиться память big_smile.gif
MIKHAIL
9.3.2014, 20:15 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
Никак.
Тип userdata не имеет какой-то определенной структуры в Lua. Структура определяется программистом при помощи метатаблиц.

Цитата
Тип userdata (пользовательские данные) позволяет хранить любые данных из C в переменных Lua. Значение этого типа является ссылкой на блок физической памяти и не имеет предопределенных операций в Lua, за исключением присваивания и проверки на равенство

http://www.lua.ru/doc/2.2.html
MIKHAIL
2.12.2013, 9:26 Protector
API2 | бот всё в одном
Код
--AutoRegCheck(tUser)
Dani_Filth

23 страниц V   1 2 3 > » 
RSS Сейчас: 4.4.2025, 21:32