当前位置:  开发笔记 > 编程语言 > 正文

为Lua声明变量和范围问题

如何解决《为Lua声明变量和范围问题》经验,为你挑选了0个好方法。

我是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()没有返回候选者,那么nearestItem仍将引用它最后一次发现的任何船只,并且在此期间,该船可能已被杀死.如果船被杀死,它将不再存在,并且getFiringSolution()将失败.

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

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

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

谢谢!


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

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

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有