【发布时间】:2010-11-07 04:52:06
【问题描述】:
C# 有this,VB 有ME。什么是 Lua 等价物?
我正在尝试在 Roblox 中引用脚本类的父类。
【问题讨论】:
-
我为您将“LUA”更改为 Lua。 Lua是葡萄牙语中的专有名词,即地球月亮的名称。它不是首字母缩写词。
C# 有this,VB 有ME。什么是 Lua 等价物?
我正在尝试在 Roblox 中引用脚本类的父类。
【问题讨论】:
来自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
【讨论】:
作为Greg pointed out already,您要查找的名称是self。
但是,请注意 Lua 不是一种 OOP 语言,就像它是一种纯粹的过程或函数式语言一样。它只是提供了实现 OOP 设计的所有底层机制。设计原则之一已表达为“提供机制,而不是策略”。因此,无法保证您运行的环境甚至使用继承,或者您可以找到任何给定对象的父对象。
查看 Lua 手册、Lua 编程和 Wiki 中与 OOP 功能相关的部分是个好主意:
【讨论】:
在 Lua 中,您需要“self”值。但是,您使用的是沙盒化的 ROBLOX。每个脚本都在自己的线程中运行,要引用脚本,您需要使用“脚本”,即 script.Parent
【讨论】:
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,它将返回父级的父级,依此类推。
【讨论】: