Lua程序设计(五十三)

这篇博客探讨了_LUA中的_ENV变量,强调了它作为普通变量的灵活性,如何通过赋值控制代码访问特定环境。文章指出,改变_ENV会导致无法访问全局变量,如math.cos。同时,介绍了如何通过显式使用_ENV或_G来规避局部声明。虽然_ENV和_G通常指向全局环境,但_ENV是执行环境的关键,可以用于创建和控制代码段的不同环境。注意,创建新环境时需要谨慎,避免丢失全局变量和函数,如print。
摘要由CSDN通过智能技术生成

使用 _ENV

由于 _ENV 的使用给我们带来了许多灵活性的手段。由于 _ ENV 只是一个普通的变量,因此可以对其进行赋值或像访问其他变量一样访问它。

_ENV = nil

这句赋值语句将使得后续代码不能直接访问全局变量。这可以用来控制代码使用哪种变量

local  print, sin = print, math.sin
_ENV = nil

print(13) --> 13
print(sin(13)) -->0.420167
print(math.cos(13)) --error!

因为math.cos需要访问 ENV ,但是 ENV 已经被置空,所以会出现错误。任何对自由名称(“全局变量”)的赋值会引发类似的错误。

我们可以显式地使用_ ENV 来绕过局部声明:

a = 13
local a = 12
print(a) --> 12
print(_ENV.a) -->13

用 _G也可以:

a = 13
local a = 12
print(a) --> 12
print(_G.a) -->13

通常, _ G 和 _ ENV 指向的是同一个表。但是, 尽管如此,它们是很不一样的实体。 _ ENV 是一个局部变量,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值