Lua中如何声明变量并确定其作用域范围?

2026-04-01 20:411阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计541个文字,预计阅读时间需要3分钟。

Lua中如何声明变量并确定其作用域范围?

我是Bitfighter的首席开发者,我们使用Lua作为脚本语言,允许玩家编写自己的定制机器人船。在Lua中,除非有明确声明,否则不需要声明变量,所有变量默认为全局范围。这导致了一些问题。

我是 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’严格’模块的略微修改版本.这似乎让我想到了我想去的地方,我会稍微改进一下消息,使它们更适合我的特定环境.

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

有关更深入的信息和其他解决方案:lua-users.org/wiki/DetectingUndefinedVariables,但我建议’严格’.

Lua中如何声明变量并确定其作用域范围?

本文共计541个文字,预计阅读时间需要3分钟。

Lua中如何声明变量并确定其作用域范围?

我是Bitfighter的首席开发者,我们使用Lua作为脚本语言,允许玩家编写自己的定制机器人船。在Lua中,除非有明确声明,否则不需要声明变量,所有变量默认为全局范围。这导致了一些问题。

我是 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’严格’模块的略微修改版本.这似乎让我想到了我想去的地方,我会稍微改进一下消息,使它们更适合我的特定环境.

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

有关更深入的信息和其他解决方案:lua-users.org/wiki/DetectingUndefinedVariables,但我建议’严格’.

Lua中如何声明变量并确定其作用域范围?