@Gigabait

Как работает переменная self?

Не могли бы вы объяснить как она работает по понятнее? Прочитал сайтов 6 про lua где была self переменная, но не понял.
  • Вопрос задан
  • 3284 просмотра
Пригласить эксперта
Ответы на вопрос 2
Lerg
@Lerg
Defold, Corona, Lua, GameDev
Lua конструктивно очень простой язык. И self это самая обыкновенная переменная, её особенность в том, что она автоматически создаётся при использовании двоеточия в объявлении или вызове функций (которые находятся внутри таблицы). Так вот self явлется ссылкой на эту самую таблицу.

Можно взять такой пример:
local cat = {}
cat.name = 'Fluffy'
function cat:sayName()
  print(self.name)
end

cat:sayName()


Создаём таблицу cat, делаём строковое поле name, объявляем ещё функцию через двоеточие и появляется возможность использовать self.

Далее вот пример абсолютно идентичного кода, просто уберу весь синтаксический сахар:
local cat = {}
cat['name'] = 'Fluffy'
cat['sayName'] = function(self)
  print(self['name'])
end

cat:sayName()


Или так
local cat = {}
cat.name = 'Fluffy'
cat.sayName = function(self)
  print(self.name)
end

cat:sayName()


Или так
local cat = {
  name = 'Fluffy',
  sayName = function(pet) -- не обязательно self
    print(pet.name)
  end
}

cat:sayName()


Или даже так
local cat
local name = 'Fluffy'
local sayName = function() -- вообще пусто
  print(cat.name)
end

cat = {}
cat['name'] = name
cat['sayName'] = sayName

cat:sayName() -- Или просто cat.sayName() через точку
Ответ написан
Prognosticator
@Prognosticator
TODO: Здесь будут ворованные умные мысли, типа мои
По аналогии с другими языками это this.
Прочитайте главу 16 "Объектно-ориентированное программирование" в книге "Программирование на языке Lua" Роберту Иерузалимски (рутрекер к вашим услугам).
Вот https://www.youtube.com/watch?v=F-xJq6s6lK0 видео поясняющее работу self (eng).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы