对象如何在Lua中引用自身?

时间:2009-07-01 01:23:55

标签: oop lua roblox

C#有this,VB有ME。什么是Lua等价物?

我正在尝试引用Roblox中脚本类的父级。

4 个答案:

答案 0 :(得分:14)

Lua documentation section 2.5.9开始,自引用通常是self

  

冒号语法用于定义方法,即函数   有一个隐含的额外参数self。因此,声明

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

的语法糖
t.a.b.c.f = function (self, params) body end

答案 1 :(得分:10)

作为Greg pointed out already,您要查找的名称为self

但是,请注意Lua不是OOP语言,而是纯粹的程序或功能语言。它只是提供了实现OOP设计的所有低级机制。其中一个设计原则被表达为“提供机制,而不是政策”。因此,无法保证您运行的环境甚至使用继承,或者您可以找到任何给定对象的父级。

最好回顾一下Lua手册,Lua编程以及与OOP功能相关的Wiki的各个部分:

答案 2 :(得分:3)

在Lua中,你会想要“自我”的价值。但是,您使用的是ROBLOX,它是沙箱。每个脚本都在它自己的线程中运行,要引用脚本,你需要使用“script”,即script.Parent

答案 3 :(得分: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,它将返回父项的父项,依此类推。