gpt4 book ai didi

lua - 为 Lua 声明变量和范围问题

转载 作者:行者123 更新时间:2023-12-04 14:22:22 28 4
gpt4 key购买 nike

我是 Bitfighter 的首席开发人员,并且我们使用 Lua 作为脚本语言,让玩家可以编写自己的自定义机器人飞船。

在 Lua 中,您不需要声明变量,所有变量默认为全局范围,除非另有声明。这会导致一些问题。以下面的代码片段为例:

loc = bot:getLoc()
items = bot:findItems(ShipType) -- Find a Ship

minDist = 999999
found = false

for indx, item in ipairs(items) do
local d = loc:distSquared(item:getLoc())

if(d < minDist) then
closestItem = item
minDist = d
end
end

if(closestItem != nil) then
firingAngle = getFiringSolution(closestItem)
end

在这个片段中,如果 findItems() 没有返回任何候选者,那么最近的Item 仍然会引用它最后一次找到的任何船,并且在中间的时间里,那艘船可能已经被杀死了。如果这艘船被杀死,它就不再存在,getFiringSolution() 将失败。

你发现问题了吗?好吧,我的用户也不会。这是微妙的,但具有戏剧性的效果。

一种解决方案是要求声明所有变量,并将所有变量默认为本地范围。虽然这种变化不会使程序员无法引用不再存在的对象,但它会使无意中这样做变得更加困难。

有没有办法告诉 Lua 将所有变量默认为本地范围,和/或要求声明它们?我知道其他一些语言(例如 Perl)有这个选项可用。

谢谢!

这里有很多好的答案,谢谢!

我决定使用 Lua 'strict' 模块的略微修改版本。这似乎让我到达了我想去的地方,我会稍微改进一下以改进消息并使它们更适合我的特定环境。

最佳答案

没有设置此行为的选项,但标准安装提供了一个“严格”模块,它正是这样做的(通过修改元表)。
用法:
要求“严格”

如需更深入的信息和其他解决方案:http://lua-users.org/wiki/DetectingUndefinedVariables ,但我建议“严格”。

关于lua - 为 Lua 声明变量和范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1014757/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com