Вопрос по oop – Как объект ссылается на себя в Lua?

7

C # имеетthis и VB имеетME, Что такое эквивалент Lua?

Я пытаюсь сослаться на родителя класса сценария в Roblox.

Я изменил "LUA" Луа для тебя. Lua - собственное существительное, имя земной луны, по-португальски. Это не аббревиатура. RBerteig

Ваш Ответ

4   ответа
2
local Table = {}
Table.Var = "Testing"

function Table:Test()
print(self.Var)
end
Table:Test()

local Table = {}
Table.Var = "Testing"
function Table.Test(self)
print(self.Var)
end

Обе функции будут делать то же самое.

--Редактировать--

Это работает только с таблицами. Если вы пытаетесь получить родительский сценарий, вам нужно использовать script.Parent

--Заметка script.Parent вернет, где находится скрипт. Если вы добавите другого родителя, script.Parent.Parent, он вернет родителя родителя и так далее.

10

Грег уже указалимя, которое вы ищетеself.

Однако следует помнить, что Lua - это не язык ООП, а чисто процедурный или функциональный язык. Он просто предоставляет все механизмы низкого уровня для реализации дизайна ООП. Один из принципов разработки был выражен как «обеспечить механизм, а не политику». По этой причине невозможно гарантировать, что среда, в которой вы работаете, даже использует наследование или что вы можете найти родителя для любого данного объекта.

Было бы неплохо ознакомиться с разделами руководства Lua, Программирование на Lua и Wiki, которые касаются функций ООП:

Lua Manual, especially sections 2.5.8, 2.5.9 and 2.8. PiL Chapter 16, linked to the online copy of the first edition, which was written at the time of Lua 5.0. Read the online copy, but be aware that the current version of Lua is different enough that buying the 2nd edition is highly recommended.) Lua Wiki on OOP, especially the tutorial and the article on simple classes.
14

Раздел документации Lua 2.5.9Самостоятельная ссылка обычноself:

The colon syntax is used for defining methods, that is, functions that have an implicit extra parameter self. Thus, the statement

function t.a.b.c:f (params) body end

is syntactic sugar for

t.a.b.c.f = function (self, params) body end
3

который находится в «песочнице». Каждый скрипт запускается в своем собственном потоке, и для ссылки на скрипт вам необходимо использовать «script», т.е. script.Parent

Похожие вопросы