如何在Lua中扩展库以便:
以下示例:此处出现错误:“尝试调用全局'getANumber'(零值)”。在方法方面,任何更好的方法都会受到欢迎。
main.lua
local myLibrary = require("library")
local myLibraryExtension = require("myLibraryExtension")
myLibraryExtension:extend(myLibrary)
myLibrary:doX()
myLibrary:doY() -- <=== ERROR HERE
library.lua
local M = {}
local function getANumber()
return 55
end
function M:doX()
print("X", getANumber())
end
return M
myLibraryExtension.lua
local M = {}
local function doY()
print("X", getANumber())
end
function M:extend(sourceClass)
sourceClass.doY = doY
end
return M
答案 0 :(得分:2)
您无法调用getANumber
文件中的myLibraryExtension.lua
功能。本地函数仅存在于library.lua
范围内,并且无法在外部使用,原因如in comments by hugomg所述。如果您想要访问私人(读取 local
)功能,您可以修改如下脚本:
library.lua
在return M
M.getANumber = getANumber
myLibraryExtension.lua
稍微修改一下doY
函数:
local function doY(this)
print("X", this.getANumber())
end
当您执行语句
时会发生什么myLibrary:doY()
lua按如下方式执行:
myLibrary.doY( myLibrary ) -- yes, myLibrary is passed as an argument too
您可以通过扩展doY
函数来接受参数(在我的情况下为this
),以便使用传递给库的参考。
然后,该对象可以访问所需的本地函数。