【问题标题】:lua how require workslua 要求如何工作
【发布时间】:2011-10-17 15:21:49
【问题描述】:

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

-- 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。

【问题讨论】:

  • 我注意到在错误消息"attempt to call local 'AStar' (a number value)" 中,S 是大写的。这是您的拼写错误还是您在某处使用了错误的大小写?

标签: lua require


【解决方案1】:

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

快速 LUA 语法糖审查:

  • func 'string' 等价于 func('string')
  • tabl.ident 等价于 tabl['ident']

当您使用require('Astar') 运行脚本时,它会执行以下操作:

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

正如上面 cmets 中有人指出的那样,您的问题可能来自使用“AStar”而不是“Astar”加载模块。 Lua 可能正在使用这个字符串加载这个脚本(因为在不区分大小写的 Windows 上,搜索名为“AStar.lua”的文件将打开一个名为“Astar.lua”的文件),但脚本不是使用它进行操作(通过使用硬编码的"Astar" 而不是"AStar" Lua 正在加载脚本)。

【讨论】:

    【解决方案2】:

    您需要在Astar.lua的末尾添加return Astar

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-03
      • 2017-06-20
      • 2013-10-31
      • 2012-11-15
      • 2012-04-24
      • 2020-10-15
      • 1970-01-01
      • 2021-10-11
      相关资源
      最近更新 更多