【问题标题】:How does an object reference itself in Lua?Lua 中的对象是如何引用自己的?
【发布时间】:2010-11-07 04:52:06
【问题描述】:

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

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

【问题讨论】:

  • 我为您将“LUA”更改为 Lua。 Lua是葡萄牙语中的专有名词,即地球月亮的名称。它不是首字母缩写词。

标签: oop lua roblox


【解决方案1】:

来自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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 你能举个例子吗?基于这个答案,我的印象是“脚本”等同于“自我”;这可能正确也可能不正确。
      【解决方案4】:
      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,它将返回父级的父级,依此类推。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        • 1970-01-01
        • 2020-11-18
        • 2017-09-15
        • 2021-10-04
        • 2012-05-29
        相关资源
        最近更新 更多