Lua模块内从模块中引用变量/函数

我正在编写电梯控制器。它使用一个名为“API”的模块,其中包含诸如OpenDoor()Floor之类的函数值。如何从模块内部使用这些值?

我曾尝试使用self但没有成功。

local API = {

Lift=script.Parent,

--现在的问题是

LiftCar=(self?).Lift.Car,

}

return API

当我尝试使用self时,我收到了一个错误,因为self不存在。

点赞
用户4687565
用户4687565

Lua 作为一种语言特性没有模块,只有表和词法作用域。

如果您使用表来表示您的模块(您确实这样做),则必须像使用表一样进行处理:LiftCar = API.Lift.Car,但在您的情况下,这是不可能的,因为本地的 API 在分配被解析时尚未定义。

这章 的 Lua 书总结了各种制作模块的方式。

最简单的两种方式之一是预先定义表:

local API = {}
API.Lift = script.Parent
…

或将所有内容定义为本地内容,稍后再填充表格:

local function myfunction() do_something() end
local API = {my = myfuncion}

第一种选择是首选方法

2019-08-04 15:18:55
用户2860267
用户2860267

在Roblox的lua中,就像DarkWiiPlayer所提到的那样,您可以使用require函数在其他脚本中包含ModuleScripts。

因此,假设您已经像在一个ModuleScript中这样定义了Elevator对象:

local Elevator = {}
Elevator.__index = Elevator

function Elevator.new()
    local e = {
        currentFloor = 1
    }
    setmetatable(e, Elevator)
    return e
end

function Elevator:OpenDoor()
    print("Opening Door to : ", self.currentFloor)
end

return Elevator

隔壁的另一个脚本可以通过以下方式包含其代码:

local ElevatorModule = require(script.Parent.Elevator)

local anElevator = ElevatorModule.new()
anElevator:OpenDoor()

您的代码抱怨self不存在的原因是您如何定义函数。 function Elevator.OpenDoor()function Elevator:OpenDoor()之间存在区别(请注意冒号与句点)。

当您使用冒号来定义函数时,一个隐藏的变量self在第一个参数中被插入。

[string库]的一个很好的例子就是[`(https://www.lua.org/pil/20.html)]:

``` -- repeat a string 5 times local hw = "Hello World" print( string.rep(hw, 5) )

-- works the same way as... print( hw:rep(5) )

-- which (stupidly) also works the same way as... print( hw.rep(hw, 5) )

```。

2019-08-05 03:17:04