Здравствуйте, гость ( Вход | Регистрация )
Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
---|---|---|---|---|---|
29.1.2014, 12:27 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Узнать количество аргументов, принимаемых той или иной функцией, возможно? Методом тыка: Прообуем разное количество и тип, смотрим на ошибки. В луа не обязательно давать то число аргументов которое обьявлено в функции. Если не хватает остальные зануляются. Если перебор то откинется лишнее. Если не правильные то выдается ошибка (вернёт нуль и текст ошибки либо вылетит). Есть функция string.dump: Ей фунцию она тебе байткод. В конце имена переменных. Следом за функционными идут локальные так что опять же метод тыка. Но это конечно работает если Lua фукция. Фунция может также использовать перемееное количество аргументов через {...} так что с именами моожет быть накладочка. |
MIKHAIL | ||
28.1.2014, 22:17 |
Вопросы Разработчикам Скриптов вопросы по скриптам (мелкие вопросы) |
Допустим, вводим переменные, которые не связаны между собой (нахождением в составе одной таблицы либо собственным именем – имя и индекс здесь для наглядности их количества) и должны быть определены уже здесь или (где в качестве символа ! указан предполагаемый вариант оператора присваивания для всех трёх переменных): Код ... data1, data2, data3 = !data0 ... Код function r(value, count) if count <= 0 then return else return value, r(value, count-1) end end local x, y, z = r(5,3) print (x,y,z) -- 5 5 5 |
Alexey, Saymon21, MIKHAIL | ||
25.9.2011, 23:48 |
Способы Повышения Производительности методы оптимизации lua кода |
[*]Большинство команд протокола NMDC оканчивается на символ "|", который служит для разделения команд, когда они находятся в одном потоке или в одной строке. Поэтому эффективнее отсылать 1 раз единую строку с командами, нежели отсылать несколько раз отдельные команды. Код local t = { тоже самое касается и сообщений (если вместо команд отправляются сообщения)."$MyINFO $ALL nick1 $ $ $ $0$", "$MyINFO $ALL nick2 $ $ $ $0$", "$MyINFO $ALL nick3 $ $ $ $0$" } local sStr = "" for i, v in ipairs(t) do sStr = (sStr == "" and "" or sStr.."|")..v end Core.SendToAll(sStr) Ужос какой. Код local t = { "$MyINFO $ALL nick1 $ $ $ $0$", "$MyINFO $ALL nick2 $ $ $ $0$", "$MyINFO $ALL nick3 $ $ $ $0$" } Core.SendToAll(table.concat(t, "|")) |
Alexey | ||
25.9.2011, 21:32 |
Функции Для Разработчиков склад полезных функций |
[attachment=6071:serialize3.lua]Ловите монстра. )) Собственно работает так: Код serialize(table, write_fnc) С table я думаю понятно а вот write_fnc это функция которой по ходу выполнения передаются куски текста. Тем самым давая возможность оптимизировать способ его сборки. Если результат нужно вывести в файл то делается так: Код local file = io.open("file_name.lua","w") file:write("x = ") serialize(_G, function(part) file:write(part) end) Ну либо в сочетании со string_builder Код var builder = new_string_builder() builder.add("return ") serialize(_G, builder.add) print(builder.get()) Ах да. Забыл сказать о преимуществах. 1 Генерирует красивый и понятный код. 2 Восстанавливает внутренние связи. 3 Проверяет особые случаи (бесконечность, -бесконечность, неопределённость). 4 Дампит функции если возможно. P.S. совсем забыл что перед результатом деятельности этой функции надо записать либо "x=" либо "return " (Исправил примеры) Используется мной здесь: |
Alexey | ||
2.8.2010, 22:13 |
Способы Повышения Производительности методы оптимизации lua кода |
В lua внутри функций можно создавать новые. Причём этим функциям доступны локальные переменные создавшей. Это позволяет легко создавать подобие класса. Код function new_object() local obj = {} local private_var = "private" obj.public_var = "public" function obj.public_fnc() return obj.public_var end local function private_fnc() return private_var end return obj end возможен даже синглтон Код single_object = (function() local obj = {} local private_var = "private" obj.public_var = "public" function obj.public_fnc() return obj.public_var end local function private_fnc() return private_var end return obj end)() -- пустая пара скобок это вызов функции созданной в первой. |
Invisible | ||
14.7.2010, 20:31 |
Функции Для Разработчиков склад полезных функций |
Сделал копию топика с другого форума чтобы можно было здесь продолжить начатое там дело. Код function new_string_builder() local string_table = {} local object = {} function object.insert(...) for idx, str in ipairs({...}) do table.insert(string_table, idx, str) end end function object.add(...) for idx, str in ipairs({...}) do table.insert(string_table, str) end end function object.get(spliter) spliter = spliter or "" return table.concat(string_table, spliter) end function object.empty() return not next(string_table) end function object.len() local len = 0 for index, str in ipairs(string_table) do len = len + #str end return len end return object end Данная функция возвращает "объект" который используется как буфер при генерации очень большого текста составляемого из большого количества маленьких кусочков. Использование. Код buf = new_string_builder() for i = 0, 10 do buf.add(i.." ") end print(buf.get()) Результат. Код 0 1 2 3 4 5 6 7 8 9 10 |
Nickolya | ||
|
Сейчас: 23.12.2024, 9:41 |