Lua - Должен ли я использовать ":" при определении функций в таблицах, если не используется ключевое слово "self"? - PullRequest
0 голосов
/ 07 декабря 2018

Это больше вопрос философии дизайна, поскольку я уже знаю, что вам не следует вызывать функцию с : (объектно-ориентированный синтаксический сахар), если функция была определена без ключевого слова self с помощью .,Но проблема в том, что программисты, использующие созданную мной библиотеку, как правило, не читают документацию и сталкиваются с вопросом «как мне вызвать вашу функцию?», Поэтому я в конечном итоге всегда определяю функции, используя метод ниже:

local tbl = {};
function tbl:Add(a, b)
   return a + b;
end

Я установил Luacheck (в VS Code), и он часто жалуется, когда я использую этот синтаксис и не использую ссылочное ключевое слово self.Там написано: [luacheck] unused argument "self".Есть ли с этим проблемы с точки зрения производительности (или есть способ отключить Luacheck в VS Code)?

Я предпочитаю писать функции в этом стиле, а не в стиле ниже:

function tbl.Add(_, a, b)
    return a + b;
end

Кажется, трудно добавить фиктивную переменную в начале списка параметров.

РЕДАКТИРОВАТЬ: Другая проблема в том, что если у вас есть много таблиц, которые реализуют функцию с тем же именем и хотят выполнять итерации по ним, но некоторые реализации не используют аргумент self, а другие -?Было бы очень утомительно и плохо проектировать, чтобы проверить, к какому типу таблиц правильно вызывать функцию.

Какой стиль предпочтителен?В общем немного запутался по поводу этого предупреждения.о чем ты думаешь?Спасибо.

1 Ответ

0 голосов
/ 07 декабря 2018

если вы не используете аргумент self, вы можете просто

function tbl.Add(a, b)
    return a + b;
end

не использовать фиктивную переменную.

Вам просто нужно быть уверенным, что вы также вызываетеэто с ., а не :
, поэтому

local someValue = tbl.Add(1, 3)

, например, а не

local someValue = tbl:Add(1, 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...