8

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

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

4

4 回答 4

15

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-01T02:25:40.537 回答
11

正如Greg 已经指出的那样,您要查找的名称是self.

但是,请注意,Lua 不是一种 OOP 语言,就像它是一种纯粹的过程或函数语言一样。它只是提供了实现 OOP 设计的所有底层机制。设计原则之一已表达为“提供机制,而不是策略”。因此,无法保证您运行的环境甚至使用继承,或者您可以找到任何给定对象的父对象。

查看 Lua 手册、Lua 编程和 Wiki 中与 OOP 特性相关的部分是个好主意:

于 2009-07-01T06:27:37.270 回答
4

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

于 2013-03-18T21:54:10.820 回答
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

--Note script.Parent 将返回脚本所在的位置。如果添加另一个父级 script.Parent.Parent,它将返回父级的父级,依此类推。

于 2014-07-01T02:38:14.690 回答