eu_tomat 2 114 Опубликовано: 28 июня, 2022 1 час назад, hohserg сказал: Я так понимаю, вопрос в том, что _ передается в аргументы функции? Вопрос, скорее всего, связан с этим фрагментом кода: load(code,"bios",_,_g) Здесь происходит обращение к несуществующей переменной. 56 минут назад, hohserg сказал: Можно вставлять в начало своих программ че-то типо... Это уже лишний код. А использовать заведомо несуществующую однобуквенную переменную вместо nil, по моему мнению, имеет смысл лишь для экстремального уменьшения объёма кода в ущерб читаемости и производительности. Или существуют другие хорошие применения этого трюка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg Автор темы 189 Опубликовано: 29 июня, 2022 Ваще-то читаемость повышается (при этом не стоит забывать, что читаемость это свойство читателя, а не свойство текста) Сравни: local _,_,sender,_,_,_,receivedValue = event.pull("modem_message", _, _, expectedPort, _, "expectedMsg") --vs-- local _,_,sender,_,_,_,receivedValue = event.pull("modem_message", nil, nil, expectedPort, nil, "expectedMsg") Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 114 Опубликовано: 29 июня, 2022 57 минут назад, hohserg сказал: Ваще-то читаемость повышается... Сравни: Сравнил. Код стал немного компактнее. Но теперь чтобы читать, требуется пролистать весь код и убедиться в том, что _==nil. А проверив, требуется держать это в уме. И при модификации кода тоже надо помнить об этом. Я понимаю, почему @rootmaster и другие новички спотыкаются. 1 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 46 Опубликовано: 11 июля, 2022 В 28.06.2022 в 13:10, hohserg сказал: Я так понимаю, вопрос в том, что _ передается в аргументы функции? Типо, обычно нижнее подчеркивание юзается для цели присваивания, чтобы проигнорировать какое-то значение. Конечно, это не значит, что переменная с таким именем всегда nil(а было бы неплохо) Можно вставлять в начало своих программ че-то типо local ignoreUnderlineAssignation = { __newindex = function(self, k, v) if k~="_" then rawset(self,k,v) end end, __index = function(self, k) if k=="_" then return nil else return rawget(self,k)end end } setmetatable(_G, ignoreUnderlineAssignation) setmetatable(_ENV, ignoreUnderlineAssignation) Токо это не работает из-за странной природы _ENV. Если кто-то шарит, как работает _ENV, напишите, плиз я шарю в _ENV, но городить такие костыли вовсе не обязательно, достаточно сувать в _ а вытягивать nil прямо из nil(пример: func(1, 2, nil, 4, 5)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg Автор темы 189 Опубликовано: 14 июля, 2022 зачем ты используешь костыль в виде искусственного освещения, ведь есть солнце? 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах