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
27.6.2013, 19:48 Вопросы Разработчикам Скриптов
вопросы по скриптам (мелкие вопросы)
lfs в помощь http://mydc.ru/topic1970.html
MIKHAIL
30.3.2013, 15:36 Способы Повышения Производительности
методы оптимизации lua кода
Ну да, что в Lua идет копирование всей строки при конкатенации, что в коде - тоже копирование всей строки.
Действительно, в Lua кроме копирования при каждом создании строки ещё и рассчитывается её хеш код.

Другое дело что в хабе лишнее копирование строк можно было бы исключить, что, однако, PPK не делает big_smile.gif
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 будет реализован big_smile.gif
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 С Днюхой Тебя!
поздравления
Присоединяюсь к поздравлениям feel_good.gif
Успехов и удачи во всём!
Nickolya

23 страниц V   1 2 3 > » 
RSS Сейчас: 22.12.2024, 18:08