lua如何工作
我正在使用一个图形库,它可以让你在Lua中编程。我需要a*寻路库,所以我在网上找到了一个。只有一个lua文件进行路径查找,还有一个示例文件。在示例文件中,它使用如下对象:lua如何工作,lua,require,Lua,Require,我正在使用一个图形库,它可以让你在Lua中编程。我需要a*寻路库,所以我在网上找到了一个。只有一个lua文件进行路径查找,还有一个示例文件。在示例文件中,它使用如下对象: -- Loading the library local Astar = require 'Astar' Astar(map,1) -- Inits the library, sets the OBST_VALUE to 1 我运行脚本,一切正常。因此,现在我将Astar.lua文件添加到图形引擎运行的路径位置,并执行相同的
-- Loading the library
local Astar = require 'Astar'
Astar(map,1) -- Inits the library, sets the OBST_VALUE to 1
我运行脚本,一切正常。因此,现在我将Astar.lua文件添加到图形引擎运行的路径位置,并执行相同的操作,结果在Astar(map,1)行中出现错误:
“尝试调用本地'AStar'(数字值)
当我做与这个AStar库附带的示例相同的事情时,你知道为什么会出现这个错误吗
下面是AStar文件的一小部分
-- The Astar class
local Astar = {}
setmetatable(Astar, {__call = function(self,...) return self:init(...) end})
Astar.__index = Astar
-- Loads the map, sets the unwalkable value, inits pathfinding
function Astar:init(map,obstvalue)
self.map = map
self.OBST_VALUE = obstvalue or 1
self.cList = {}
self.oList = {}
self.initialNode = false
self.finalNode = false
self.currentNode = false
self.path = {}
self.mapSizeX = #self.map[1]
self.mapSizeY = #self.map
end
所以请注意,当我从图形引擎运行它时,它返回1,但当从它附带的示例运行时,它返回一个表,这是它应该返回的。所以不确定为什么它只返回1。您需要在
Astar.lua
的末尾添加return Astar
如何添加Astar到示例脚本的package.loaded
表,与您的代码相对
快速LUA语法回顾:
相当于func'string'
func('string')
等同于tabl.ident
tabl['ident']
require('Astar')
运行脚本时,它就是这样做的:
- 检查
是否为非零值。package.loaded['Astar']
- 如果是,则返回此值。否则,将继续此列表
- 运行
(和package.path
)中列出的模式的文件名,并将“?”替换为“Astar”,直到找到与模式匹配的第一个文件package.cpath
- 将
设置为package.loaded['Astar']
true
- 以
作为参数运行模块脚本(通过上面的路径搜索找到-在本例中,我们假设它不是C模块)(在模块脚本中可作为'Astar'
访问)..
- 如果脚本返回一个值,则将该值放入
包中。加载['Astar']
- 返回已加载的['Astar']包的内容。
- 请注意,脚本可以将包加载到
中作为其执行的一部分,并且不返回任何内容package.loaded['Astar']
- 请注意,脚本可以将包加载到
正如有人在上面的评论中指出的,您的问题可能来自使用“AStar”而不是“AStar”加载模块。Lua可能是使用此字符串加载此脚本(因为在不区分大小写的窗口中,搜索名为“AStar.Lua”的文件将打开名为“AStar.Lua”的文件),但脚本没有使用该字符串操作(通过使用硬编码的
“Astar”
而不是“Astar”
Lua正在加载下面的脚本)。我注意到错误消息“尝试调用本地“Astar”(数字值)
,S是大写的。这是您的输入错误还是您可能在某处使用了错误的大写?