Lua中如何实现对象引用自身?

C# 有 this,VB 有 ME。Lua 有相应的内容吗?

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

原文链接 https://stackoverflow.com/questions/1066886

点赞
stackoverflow用户893
stackoverflow用户893

Lua文档2.5.9可以得知,通常使用self作为自引用:

冒号语法用于定义方法,即具有隐式额外参数self的函数。因此,语句

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

是以下代码的简单写法

t.a.b.c.f = function (self, params) body end
2009-07-01 02:25:40
stackoverflow用户68204
stackoverflow用户68204

正如 Greg 已经指出的,你寻找的名称是 self

然而, 请注意Lua不是一个面向对象的语言,就像它不是一个纯过程化或函数式的语言一样。它只是提供了所有实现OOP设计的低级机制。其中一个设计原则被表达为“提供机制而非策略”。因此,无法保证您运行的环境甚至使用继承或者您可以为任何给定的对象找到父对象。

最好查看与OOP功能相关的Lua手册,Programming in Lua和Wiki的章节:

  • Lua Manual,特别是第2.5.82.5.92.8节。
  • PiL第16章,链接到第一版的在线副本,该版是在Lua 5.0时编写的。阅读在线副本,但请注意,当前版本的Lua与第一版有足够的不同,因此强烈建议购买第二版。
  • Lua Wiki on OOP,特别是教程和有关简单类的文章。
2009-07-01 06:27:37
stackoverflow用户1919833
stackoverflow用户1919833

在 Lua 中,你需要使用 "self" 值。然而,你正在使用被沙盒隔离的 ROBLOX。每个脚本运行在它自己的线程中,并且要引用脚本,你需要使用 "script",即 script.Parent。

2013-03-18 21:54:10
stackoverflow用户3792288
stackoverflow用户3792288
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

Table.Test(Table)

两个函数的效果相同。

--编辑--

这只适用于表格。如果你要获取脚本的父级,你需要使用 script.Parent

--注意

script.Parent 会返回脚本所在的位置。如果你添加了另一个父级,script.Parent.Parent 会返回父级的父级,以此类推。

2014-07-01 02:38:14