如何高效查找Lua变量及修改全局变量?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1225个文字,预计阅读时间需要5分钟。
一、从hello world说起,当执行`print(Hello World!)`时,明显这是需要一个具有执行一个特定的指向标准输出设备打印字符串的功能。因此,这里首先涉及到的是一个函数查找的问题,也就是如何找到这样一个函数。同时,也涉及到如何将字符串和对结合起来使用。
一、从hello world说起
当执行print("Hello World!")时,明显这是需要有执行一个特定的向标准输出打印字符串的功能,所以这里首先涉及到的是一个函数查找的问题,也就是如何把字符串和对应的功能联系起来。在最为常见的C语言中,这个查找是由链接器完成的:它从所有的obj文件中查找这个函数的定义,然后把这个地方转换成对应位置的CPU call指令。对应地,对于lua,同样需要有方法将这个字符串和真正的函数调用联系起来。那么最后的问题就是:当lua遇到一个变量时,它会如何查找这个变量?
二、查找的实现
1、查找的实现代码
这个代码实现也比较直观:首先是在函数级别的Local中查找,如果查找则认为是VLOCAL类型,否则查找当前函数已经存在的upvalue,最后默认认为是在全局变量表中。这个“全局”就是很高级别了,相当于整个lua虚拟机共享,也就是全局变量了。
这些变量确定类型的原因在于它们会影响指令的生成,而不同指令会指明变量从哪里查找。
本文共计1225个文字,预计阅读时间需要5分钟。
一、从hello world说起,当执行`print(Hello World!)`时,明显这是需要一个具有执行一个特定的指向标准输出设备打印字符串的功能。因此,这里首先涉及到的是一个函数查找的问题,也就是如何找到这样一个函数。同时,也涉及到如何将字符串和对结合起来使用。
一、从hello world说起
当执行print("Hello World!")时,明显这是需要有执行一个特定的向标准输出打印字符串的功能,所以这里首先涉及到的是一个函数查找的问题,也就是如何把字符串和对应的功能联系起来。在最为常见的C语言中,这个查找是由链接器完成的:它从所有的obj文件中查找这个函数的定义,然后把这个地方转换成对应位置的CPU call指令。对应地,对于lua,同样需要有方法将这个字符串和真正的函数调用联系起来。那么最后的问题就是:当lua遇到一个变量时,它会如何查找这个变量?
二、查找的实现
1、查找的实现代码
这个代码实现也比较直观:首先是在函数级别的Local中查找,如果查找则认为是VLOCAL类型,否则查找当前函数已经存在的upvalue,最后默认认为是在全局变量表中。这个“全局”就是很高级别了,相当于整个lua虚拟机共享,也就是全局变量了。
这些变量确定类型的原因在于它们会影响指令的生成,而不同指令会指明变量从哪里查找。

