lua怎么需要工作

use*_*521 10 lua require

我正在使用一个图形库,可以让你在Lua中编程.我需要A*寻路库,所以我在网上找到了一个.它只是一个lua文件,它执行路径查找和一个示例文件.在示例文件中,它使用如下对象:

-- Loading the library
local Astar = require 'Astar'
Astar(map,1) -- Inits the library, sets the OBST_VALUE to 1
Run Code Online (Sandbox Code Playgroud)

我运行脚本,一切正常.所以现在我将Astar.lua文件添加到我的图形引擎运行的路径位置并执行相同的操作,我在Astar(map,1)行上得到错误:

"试图打电话给当地的'AStar'(数字值)

有什么想法,当我做这个AStar lib附带的例子时,我会得到那个错误?

这是一个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
Run Code Online (Sandbox Code Playgroud)

所以请注意,当我从我的图形引擎运行它时它返回1,但是当它从它附带的示例运行时它返回一个表,这应该返回它.所以不确定为什么它只会返回1.

Stu*_*ley 12

package.loaded对于示例脚本,Astar如何添加到表中,而不是代码?

QUICK LUA SYNTACTIC SUGAR REVIEW:

  • func 'string' 相当于 func('string')
  • tabl.ident 相当于 tabl['ident']

当您使用脚本运行时require('Astar'),它就是这样做的:

  • 检查if package.loaded['Astar']是否为非零值.
    • 如果是,则返回该值.否则它继续在此列表中.
  • 使用'?' 运行package.path(和package.cpath)中列出的模式的文件名 替换为'Astar',直到找到与模式匹配的第一个文件.
  • 设置package.loaded['Astar']true.
  • 运行模块脚本(通过上面的路径搜索找到 - 为了这个例子,我们假设它不是一个C模块)'Astar'作为参数(可以...在模块脚本中访问).
  • 如果脚本返回一个值,则将此值放入package.loaded['Astar'].
  • package.loaded['Astar']返回的内容.
    • 请注意,脚本可以将包加载到package.loaded['Astar']其执行过程中,并且不返回任何内容.

正如上面评论中提到的那样,您的问题可能来自使用'A S tar'而不是'A s tar' 加载模块.Lua可能正在使用此字符串加载此脚本(因为,在不区分大小写的Windows上,搜索名为"AStar.lua"的文件将打开一个名为"Astar.lua"的文件),但脚本不是使用它进行操作(通过使用硬编码"Astar"而不是"AStar"Lua正在加载脚本).


lhf*_*lhf 6

你需要return Astar在最后添加Astar.lua.