Snusmumriken
Много чего.
jon
я вижу он в паскедж патч что-то пихает
Snusmumriken
Да, это для require, относительных от пути запускаемого в базовом интерпретаторе скрипта.
jon
попробую, спасибо
Snusmumriken
Готово?
jon
пока нет, пытался добить, не вышло, не хочется по проекту размазывать такое полотно, но проверю
Snusmumriken
Вообще, я для себя написал вот это вот: https://pastebin.com/k00zSt16 И запускаю луёвые скрипты через него. Выглядит примерно так: luajit.exe /path/to/script_runner.lua path/to/main_project_lua_file.lua Никаких сайд действий не выполняется, хвосты чистятся, для проекта оно выглядит как будто его запустили напрямую.
jon
а reqire относительно чего вызывать?
Snusmumriken
Относительно любого скрипта в корне проекта. myproject: — main.lua — something.lua — libdir — — mylib.lua *main.lua* foo = require'something' bar = require'libdir.mylib'
jon
так точки входа же могут быть разными
Snusmumriken
В каком смысле?
Snusmumriken
У тебя всегда есть скрипт работающий основной точкой входа, и как правило он в корне проекта. Или что ты пихаешь в качестве точки входа в интерпретатор?
Snusmumriken
Или ты внезапно хочешь запускать допустим mylib.lua? Тогда корнем станет он.
jon
я просто не так давно ознакомился с lua, но как я понимаю, с проектом, с которым вожусь, используются lua скрипты, и отдельно ещё есть тесты, и тут я хз, может ли для них быть иная точка входа
jon
или я не прав и такое не делают?
Snusmumriken
Не должны. И тесты должны быть по хорошему в корне или запущены из корневого скрипта.
jon
хм, значит ещё подумаю
Snusmumriken
Или они делают тупую проверку либ, которые не реквайрят ничего дополнительного, а ля атомарные проверки, что и должно быть по хорошему.
mva
вообще, зависит от того что это за проект
mva
но в среднем по больнице - можно брать за правило что интерпретатор запускается в корневой директории проекта, и пути везде писать относительно этого
Snusmumriken
Если сделано иначе — писали придурки.
jon
вроде разобрался в своей проблеме, но надо будет с колег дёргать, как-то мутно всё
Snusmumriken
Johann: Всем доброго времени суток! А подскажите пожалуйста. Есть модуль с вот такой инициализацией (параметры опускаю, но если что, это resty.aes): local _M = { _VERSION = '0.14' } local mt = { __index = _M } function _M.new(...) ... return setmetatable({ ... }, mt) end Чем это принципиально отличается от такой инициализации класса: Class = {} Class.__index = Class function Class.new() return setmetatable({}, Class) -- returns an instance end Во втором случае, если мне надо проверить, что мне передан экземпляр данного класса, я могу сделать так: if getmetatable(obj) == Class then ... В первом случае так не работает, но зато работает вот так: aes = require("resty.aes") obj_meta = getmetatable(obj) if type(obj_meta) == "table" and obj_meta.__index == aes then ... Но у меня такое чувство, что я что-то недопонимаю и делаю не совсем так, как надо. Можете объяснить, в чём разница между этими двумя способами инициализации класса? И как правильно проверять, является ли переданный мне obj экземпляром класса aes?
Snusmumriken
Ответ от редакции: принципиальное отличие в том, что в первом случае у тебя таблица "класса" и метатаблица — разные вещи. Во втором случае — одно и то же, что позволяет наполнять её метаметодами, и они будут применены к инстансам объектов. Иногда это приводит к нежелательным последствиям, например у объектов появляется метод new, который делает не то что ты хочешь. Но на это обычно можно забить.
Johann
Спасибо. А сам способ проверки obj на принадлежность классу правильный, или можно как-то короче?
Snusmumriken
Есть пара вариантов. Например такой: Class = {} Class.__index = Class Class.Type = "MyClass" function Class.new() return setmetatable({}, Class) -- returns an instance end А потом такой: obj.Type == "MyClass"???
Snusmumriken
Или такой: function isClass(obj, class) return getmetatable(obj).__index == class end
Johann
Но ведь если getmetatable(obj) вернёт nil, будет ошибка в рантайме?
Johann
Тогда может так? return (getmetatable(obj) or {}).__index == class
Snusmumriken
Ну во-первых не пихай в isClass не объекты ))0 Во-вторых да, можно чуть удлиннить: function isClass(obj, class) if type(obj) ~= "table" or type(class) ~= "table" then return end local mt = getmetatable(obj).__index return mt and mt.__index == class end
Johann
Ну в том то и дело, что я пишу нечто для генерации токенов доступа, и предполагаю, что мне одним из параметром передадут уже проинициализированный объект от resty.aes, но надо бы проверять по правилам хорошего тона. Я в lua пока что новичок. Хотя итераторы уже освоил ))
Snusmumriken
Ну карочи дело принципиально несложное, я обычно ещё каждому классу (в функции-генераторе классов) добавляю метод типа: MyClass:Type(something) if type(something) == "string" then return self.__type == something end if type(something) == "table" then return getmetatable... == something end return self.__type end Шоб было прям многозначное применение в случае чего, и так и эдак.
Aydar
ну бесконечную функцию я же смогу запустить
http://lua-users.org/lists/lua-l/2014-03/msg00449.html Можно еще разрезервировать зарезервированные слова, но это уже кастомный интерпретатор
Александр
http://lua-users.org/lists/lua-l/2014-03/msg00449.html Можно еще разрезервировать зарезервированные слова, но это уже кастомный интерпретатор
ну это очевидное решение, я вообще думал, что кому-то уже приходило это в голову, эдакий json мира lua
Aydar
ну это очевидное решение, я вообще думал, что кому-то уже приходило это в голову, эдакий json мира lua
Если ветка обсуждений есть в списке рассылки то "это уже приходило кому-то в голову", но видимо такое мало кому нужно
🏛🏛public class🏛🏛
Тут есть кто с Еревана?
Tony
Тут есть кто с Еревана?
вы уже в двух чатах минимум это спросили
🏛🏛public class🏛🏛
вы уже в двух чатах минимум это спросили
я знаю. и всё равно не факт что найду кого надо
🏛🏛public class🏛🏛
это связано с айти в любом случае
mva
алкоголизм тоже связан с химией, например. Это не повод искать собутыльников в чате химиков-технологов
mva
и это только "во-первых"
mva
а во-вторых, nometa.xyz
mva
есть вопрос - надо задавать его, а не метавопросы
mva
это будет более уважительно по отношению к собеседникам и сэкономит время обеим сторонам
Aqendo
а во-вторых, nometa.xyz
А как же yesmeta.xyz?)
mva
А как же yesmeta.xyz?)
мне правда надо отвечать? >_>
Highly Likely
я знаю. и всё равно не факт что найду кого надо
Есть куча чатов про Ереван, искать явно нужно не тут :)
Highly Likely
Есть куча чатов про Ереван, искать явно нужно не тут :)
Как минимум два на несколько тысяч человек
Сергей
Здравия!
Сергей
Хочу себе красивые коньки, в луа не в зуб ногой. Подскажите книжку по этому волшебному языку)
Igor
Читай закрепы чата, там всё есть
Александр
Сергей
Читай закрепы чата, там всё есть
Там есть гугли. Я спрашивал не потому что это не умею, а потому что интересно мнение тех, кто с ним знаком. И может посоветовать наилучший вариант.
Igor
Благодарю!
Именно на эту книгу ссылка в закрепленных сообщениях чата и находится
Igor
Я туда и отправил потому что сам читал эту книгу и могу её посоветовать.
Сергей
Я туда и отправил потому что сам читал эту книгу и могу её посоветовать.
Вон оно что.... В самом конце затесалось) благодарю)
Сергей
Хм... И оба про одну и ту же книгу)) ушел качать, читать) ещё раз благодарю за напутствие)
Сергей
P.S.: приходите в гости)
Сергей
Ааа ссылки запрещены))
Aqendo
Ааа ссылки запрещены))
запрещены участникам чата, который зашли менее 2х дней назад или около того
Aqendo
оказывается я путешественник во времени. Написал в следующий день, пока еще в 8ом мая :D
Igor
Но может не в следующий, а в прошлый. Тогда получается назад в будущее.
Igor
Мышку на тайминг наведи, станет ясно)))
Aqendo
Не знаю почему, но в KDE PLASMA баг,я указал время Москву, а там на 3 часа позже, думал чзх, поставил UTC и (о чудо!) стало московское
Александр
Не знаю почему, но в KDE PLASMA баг,я указал время Москву, а там на 3 часа позже, думал чзх, поставил UTC и (о чудо!) стало московское
Не в ней, а в биосе(а точнее несостыковке времени различных ОС и системных часов биоса), т.к. у тебя там могут различаться время биоса и системы, плюс если у тебя стоит одновременно винда, то у тебя она может ставить биос как московское, в тоже время линь будет считать биос как УТС
Aqendo
mva
эт, товарищи... А напомните, пожалуйста, как бы в 5.1-синтаксисе выйти из вложенных циклов, но не из функции внутри которой они выполняются?
fgntfg
break?
mva
break?
из всех
mva
в смысле, не только из самого глубокого вложенного, но вообще из всей цепочки вложенных циклов
mva
и вернуться на уровень функции
fgntfg
Добавить флаг и условие выполнения цикла
fgntfg
Ну или 5.2 и goto
Tony
Ну или 5.2 и goto
goto добавили так поздно?