Lua MiddleClass.Как передать «я» из другого файла - PullRequest
0 голосов
/ 08 сентября 2011

Скажите, если у меня есть два или более файлов, использующих расширение среднего класса, более или менее подобное. Я опустил некоторые из очевидного кода реализации среднего класса.

Файл A:

function Battlefield:initialize()
    self.varA
    self.varB
end

function Battlefield:attack()
   --I want to use self.varA here
end

Файл B

BattlefieldInstance = Battlefield:new()

function doStuff()
    BattlefieldInstance:attack()
end

Я знаю, что эта структура более или менее работает, потому что я уже много использую ее в своем проекте, но моя проблема в том, что я хочу использовать эти собственные переменные. Обычно для этого передается экземпляр self между функциями внутри одного и того же файла, но когда я делаю это из другого файла, я, очевидно, не могу передать self, потому что это будет другой self, и мне нужно self из файла, где находится функция расположен. Извините, если мой вопрос немного сбивает с толку. Я постараюсь уточнить любые вопросы, которые есть.

Ответы [ 3 ]

3 голосов
/ 08 сентября 2011

Понятия не имею, что такое средний класс, но я думаю, что вы путаете себя. Работа self в Lua - это функция, которая выглядит так: function Battlefield:attack() - это то же самое, что и function Battlefield.attack(self). Другими словами, self - это просто неявный первый параметр функции. И вызов метода instance:attack() в точности эквивалентен instance.attack(instance) (хотя он не оценивает instance дважды, если вы используете выражение там).

Другими словами, BattlefieldInstance:attack() должен делать именно то, что вы хотите.

0 голосов
/ 15 апреля 2012

Средний класс был библиотекой, которую я впервые увидел разработанной для Love2D;Я предполагаю, что это тот же самый, который использует корона?(Я немного использовал Corona ... но не систему ООП среднего класса)

в любом случае вы также можете попробовать напрямую использовать мета таблицы, например:распечатаю self.var1 (somedata).

Надеюсь, это поможет!

0 голосов
/ 08 сентября 2011

«self» - это ключевое слово, которое означает «текущий объект». Таким образом, в случае функций Battlefield «self.varA» внутри функции - это та же переменная, что и «Battlefield.varA» вне функции.

...