Перейти к содержимому

Ktlo

Пользователи
  • Публикации

    96
  • Зарегистрирован

  • Посещение

  • Победитель дней

    9

Все публикации пользователя Ktlo

  1. Я про ту библиотеку @qwertyMAN'а, которую ты упомянул в самом начале.
  2. Это не отменяет того факта, что без ООП это будет сделать проще, и быстрее в последствии будет вычисляться. Также интересно, где мне потребуется использовать столько нетипичных СС вместе, но спор был не об этом. Ну я же по теме, просто получается, что "+1 велик", написал ты. P.S. Всё ухожу.
  3. a = CustomInteger("FF", 16) b = CustomInteger("73", 8) print((a + b):to(8)) Вот второе. Это второе пишется немного дольше, вводит бессмысленный объект "CustomInteger", да и вычисляет немного дольше. А главное не понятно зачем это. В Lua уже существуют числа, а вопросом, как их считать и отобразить, должна была заниматься твоя библиотека. Также интересно, что мне делать с этой конструкцией: for i = 0, CustomInteger("KTLO", 63) do print(i) --Интересно... end Разумеется я могу переводить каждый раз число в нужную мне СС, используя при этом tonumber(), ведь у тебя нет соответствующего метода, но не лучше ли мне использовать стандартный тип? Чем постоянно его конвертировать? Но это не самое весёлое... Надо бы ответить тем же: . Не знаю будет ли это новостью, но 16+15 == 0x10 + 0xF, к примеру. При чём числа в компьютере хранятся в двоичном виде. Это одна из причин существования разных СС, остальные сам додумай. Сразу открою секрет, почему люди пользуются в основном десятичной СС:
  4. В чём смысл вычислений в разных системах счисления, если это по сути одно и тоже? Не понимаю, зачем здесь ООП. В остальном функционал не прибавился.
  5. while <условие> do --какие-то действия end Пока условие верно цикл будет работать. Пример: local i = 0 while i < 10 do i = i+1 end Есть ещё такой цикл с условием: repeat --Какие-то действия until <условие> Этот цикл запускает первую итерацию (один проход по телу цикла) после смотрит на условие, если оно не верно, то запускает новую итерацию. Также цикл можно прервать внутри его блока при необходимости через условный блок: local i = 0 while true do --условие true всегда верно, => цикл должен работать бесконечно, i = i+1 --пока его что-то не прервёт внутри блока]] if i < 10 then --Условный блок break --Действие, прерывающее цикл. end end
  6. По-моему лучше искать имена библиотек во всех директориях, которые указаны в package.path, там прописана не только /lib/, а ещё и другие места, также это даст возможность изменить место поиска этих библиотек.
  7. Значит это одна из причин, почему это не следует делать . А вообще тогда придётся изменить некоторые привычки при написании кода, например делать все переменные локальными, или просто создать отдельную таблицу для такого специфического способа загрузки библиотек.
  8. Нет, @swg2you имел в виду это: setmetatable(_G, { __index = function(_G, libName) local lib = require(libName) rawset(_G, libName, lib) return lib end }) Теперь, если мы попытаемся вызвать функцию любой из библиотек, то она будет сразу загружаться в ОЗУ, если её там нет. При каждом последующем использовании библиотеки она уже не будет заново загружаться.
  9. Ну я тоже пытался, прямо после ваших слов. На Lua 5.2 и 5.3 всё прекрасно работает.
  10. Не надо дезинформировать людей, _ENV работает. С чего бы он перестал работать?
  11. Да. С _G можно взаимодействовать, как с обычной таблицей, на ней будут работать все свойства и методы метатаблицы. Код типа: variable = 12 Для Lua значит тоже, что и: _ENV["variable"] = 23 -- или _ENV.variable = 23 -- и почти то же самое _G.variable = 23 _ENV — локальная переменная, которая выступает в роли окружения функции, изначально _G — окружение любой функции, разумеется это можно изменить, просто сменив значение _ENV или создав более локальную _ENV
  12. В данном случае память особо не тратится, т. к. не библиотека второй раз не загружается с диска, а уже хранится в package.loaded, оттуда и берётся в при вызове require(), следовательно (c == component). То-есть память тратится только на переменную, но не на её значение. Я использую другой метод, я заставляю сборщик мусора решать за меня, какая библиотека используется, а какая нет. Как известно сборщик мусора удаляет те объекты (таблицы, функции, потоки, userdata) в Lua, которые не используются ни в одной переменной, к которым нет доступа ни откуда. Значит мы можем использовать эту особенность у удалять неиспользуемую библиотеку с помощью метатаблиц: setmetatable(package.loaded, { __mode = "v" }) Теперь неиспользуемые модули будут выгружаться автоматически, когда сборщик мусора до них доберётся.
  13. Если этим демонстрируется освобождение памяти от модуля "lol", то ничего не выйдет, модуль всё ещё хранится в таблице package.loaded. Да, я кеп.
  14. Я если честно не понял, зачем это. Что это даёт, и какая польза от этой программы? Я попробовал запустить ею пустой файл, комп завис.
  15. Я так понимаю, что никто не пытался эту библиотеку использовать. Она не работает, не возвращает саму таблицу с функцией в конце. Я это поправил, но сюрпризы не закончились.
  16. Пытаюсь расшифровать матрицу

  17. Слишком честное казино выходит, не хватает при запуске аргумента для управления процентом удачи, который можно установить на 0%
  18. Меня смущает вот этот код: local function stop() local running = false end Что это? Возможно по-этому у тебя не работает выход, но я стал копать дальше: ... local function run() oldPix = gpu.get(mouseX, mouseY) gpu.set(mouseX, mouseY, "█") local running = true while running do local _, _, key, code = event.pull("key_down") if key == 0 and code == 88 then stop() ... Тайна функции stop() раскрылась. Ты создаёшь в данном случае две разные переменные running, которые не зависят друг от друга. Надо было сделать так: local running = true local function stop() running = false end и убрать строчку 47 в твоей программе. Про сдвиг вправо и влево я не знаю, возможно клавиши не правильно указал, мигания основного курсора связано с тем, что term продолжает работать, так что лучше бы ты это сделал через term.
  19. Обновление 1.0 Во-первых версия 1.0! Думаю пора, т. к. нечего тут уже добавлять, только исправлять, если есть баги (надеюсь они кончились). Добавлена защита от дурака. Теперь нельзя так: object.path = {} -- Передаём параметру path значение таблицы (должна быть строка). --Такое действие выдаст вам ошибку. object.n = 6 -- Значение присваивать этому параметру нельзя. --Выдаст ошибку, object.n теперь только читаемое Исправлен небольшой баг, связанный с чтением массива. Теперь, если при пользовательском вводе допущена ошибка в одном из элементов массива, то массив всё равно прочитается, а ошибочный элемент будет заменён строкой с ошибкой, с номером элемента. Пример ошибки: "#5: couldn't read unregistered type". Теперь думаю можно выкладывать в репозиторий...
  20. Надо сделать маленькую библиотеку, которая будет скачивать другие библиотеки из этого репозитория на подобии require(). Не буду сейчас объяснять, как это будет работать, но думаю многим понравится. Давно хотелось что-нибудь такое сделать, но репозитория тогда не было.
  21. Read only mode has activated

    1. Fingercomp

      Fingercomp

      no-no-no-no-no-no! /mode Ktlo -ro

    2. Quant

      Quant

      Прямо мои мысли читаешь.

    3. Mecopy6ka
  22. Действительно, это же не будет работать. Я не уверен, что вообще скомпилируется. Нужно проверять свой код.
  23. На 16 строчке вы два раза меняете метатаблицу у одной и той же таблицы. Object2 = setmetatable(setmetatable({},Object1),{ __call = function(self) return setmetatable({t=2},self) end }) Перепишите вот так: Object2 = setmetatable({},Object1) Метаметод __call в таком случае у вас не перепишется, да и зачем? Если вам всё же необходимо это сделать, то вот решение: Object2 = setmetatable({}, { __index = Object1; __call = function(self) return setmetatable({t=2},self) end; })
  24. Можешь проверить интервал сам с помощью: setmetatable({},{__gc=function()print("Произошла очистка памяти")end}) Вставь это в какую-нибудь программу или попробуй в интерпретаторе. Интервал разным будет, разумеется.
  25. Такое впечатление возникло, что я смотрю на программу для Windows 10. Похоже Мелкомягкие переборщили с минимализмом. А вообще выглядит красиво , напоминает реальный Photoshop.
×
×
  • Создать...