返回介绍

2.3 - 变量

发布于 2019-08-25 13:16:33 字数 1367 浏览 1108 评论 0 收藏 0

2.3 - 变量

写上变量的地方意味着当以其保存的值来替代之。 Lua 中有三类变量:全局变量,局部变量,还有 table 的域。

一个单一的名字可以表示一个全局变量,也可以表示一个局部变量 (或者是一个函数的参数,这是一种特殊形式的局部变量):

	var ::= Name

Name 就是 §2.1 中所定义的标识符。

任何变量都被假定为全局变量,除非显式的以 local 修饰定义 (参见 §2.4.7)。 局部变量有其作用范围: 局部变量可以被定义在它作用范围中的函数自由使用 (参见 §2.6)。

在变量的首次赋值之前,变量的值均为 nil

方括号被用来对 table 作索引:

	var ::= prefixexp `[´ exp `]´

对全局变量以及 table 域之访问的含义可以通过 metatable 来改变。 以取一个变量下标指向的量 t[i] 等价于调用 gettable_event(t,i)。 (参见 §2.8 ,有一份完整的关于 gettable_event 函数的说明。 这个函数并没有在 lua 中定义出来,也不能在 lua 中调用。 这里我们把它列出来只是方便说明。)

var.Name 这种语法只是一个语法糖,用来表示 var["Name"]

	var ::= prefixexp `.´ Name

所有的全局变量都是放在一个特定 lua table 的诸个域中,这个特定的 table 叫作 environment (环境)table 或者简称为 环境 (参见 §2.9)。 每个函数都有对一个环境的引用, 所以一个函数中可见的所有全局变量都放在这个函数所引用的环境表(environment table)中。 当一个函数被创建出来,它会从创建它的函数中继承其环境,你可以调用 getfenv 取得其环境。 如果想改变环境,可以调用 setfenv。 (对于 C 函数,你只能通过 debug 库来改变其环境; 参见 §5.9)。

对一个全局变量 x 的访问 等价于 _env.x,而这又可以等价于

 gettable_event(_env, "x")

这里,_env 是当前运行的函数的环境。 (函数 gettable_event 的完整说明参见 §2.8。 这个函数并没有在 lua 中定义出来,也不能调用。 当然,_env 这个变量也同样没有在 Lua 中定义出来。 我们在这里使用它们,仅仅只是方便解释而已。)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文