Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 在Lua中,对象如何引用自身?_Oop_Lua_Roblox - Fatal编程技术网

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

Oop 在Lua中,对象如何引用自身?,oop,lua,roblox,Oop,Lua,Roblox,C有这个,VB有我。Lua的等价物是什么 我试图引用Roblox中脚本类的父类。从中,自引用通常是self: 冒号语法用于定义方法,即 有一个隐式的额外参数self。因此,声明 function t.a.b.c:f (params) body end 语法上的糖是什么 t.a.b.c.f = function (self, params) body end 例如,您要查找的名称是self 但是,请注意,Lua不是一种OOP语言,也不是一种纯粹的过程语言或函数语言。它只是提供了实现OOP设计的

C有
这个
,VB有
。Lua的等价物是什么

我试图引用Roblox中脚本类的父类。

从中,自引用通常是
self

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

function t.a.b.c:f (params) body end
语法上的糖是什么

t.a.b.c.f = function (self, params) body end
例如,您要查找的名称是
self

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

最好回顾一下Lua手册、Lua编程和Wiki中与OOP功能相关的部分:

  • ,特别是章节,以及
  • ,链接到第一版的在线副本,该版本编写于Lua5.0时代。请阅读在线副本,但请注意,Lua的当前版本差异很大,强烈建议购买第二版。)
  • ,特别是关于
    • 在Lua中,您需要“self”值。但是,您使用的是ROBLOX,它是沙盒。每个脚本都在自己的线程中运行,要引用脚本,需要使用“script”,即script.Parent

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

      这两个函数将做相同的事情

      --编辑--

      这只适用于桌子。如果试图获取脚本的父级,则需要使用script.parent

      local Table = {}
      Table.Var = "Testing"
      
      function Table:Test()
      print(self.Var)
      end
      Table:Test()
      
      --注
      父脚本将返回脚本所在的位置。如果添加另一个父项script.parent.parent,它将返回父项的父项,依此类推。

      我为您将“LUA”更改为LUA。Lua是一个专有名词,在葡萄牙语中是地球卫星的名称。这不是首字母缩略词。你能添加一个例子吗?基于这个答案,我的印象是“脚本”相当于“自我”;这可能正确,也可能不正确。