Lua5.2中的全局环境
Lua的实现是非常简单而且清晰的,我决定整理一下最近学到的lua知识,我想先从lua的环境开始谈起。
环境是个什么概念呢?在lua中,大部分的结构都可以用table来表达,环境也不例外,环境指的是一张表,这张表里保存这能够使用的全局变量。这样说还是不太清晰,接着看就会明白了。
全局环境是什么呢?Lua有一个大的环境,即 _G 环境。这个是全局环境,保存着全局的变量。可以通过这行代码打印出 _G 环境里的内容:for k, v in pairs(_G) do print(k, v) end,在我的电脑中,显示的结果如下(版本是lua5.1的,所以有部分值在lua5.2中已经看不到了):
下面我们一个一个来弄清楚全局环境里的这些东西从哪来。
lua源码linit.c中,在luaL_openlibs中把下面这个table中对应的内容以及模块的名称放到了 _G 环境中。
在base库里面向 _G 环境添加了23个函数和2个值,这些可以在源文件lbaselib.c里面找到:
内容如下25个值:
_G、_VERSION、assert、collectgarbage、dofile、error、getmetatable、ipairs、loadfile、load、loadstring、next、pairs、pcall、print、rawequal、rawlen(lua5.2中增加的,lua5.1中没有)、rawget、rawset、select、setmetatable、tonumber、tostring、type、xpcall
然后是9个模块的名字对应的table,在lualib.h里可以找到定义,分别是:coroutine、table、io、os、string、bit32(lua5.2中增加的,lua5.1中没有)、math、debug、package,他们在linit.c中由luaL_requiref(luaxlib.c)函数放入 _G 环境中。
还剩下8个值:unpack、arg、module、require、getfenv、setfenv、newproxy、gcinfo
unpack在加载table库(ltablib.c)时放入 _G 环境:
arg在lua脚本执行的时候(lua.c)被放入 _G 环境中:
module和require在加载package时(loadlib.c)被放入 _G 环境。
lua5.2中没有把getfenv、setfenv、newproxy、gcinfo放入全局环境中了。lua5.1中还保留这4个值。
转载于:https://blog.51cto.com/rangercyh/1107103
Lua5.2中的全局环境相关推荐
- Lua中的函数环境、_G及_ENV
lua5.1中的全局环境变量 Lua将环境table保存在一个全局变量_G中,可以对其访问和设置.一般我们把需要被访问的对象和函数等放到这里, 然后我们可以在需要时通过它来访问和使用. 可以通过val ...
- 安装Windows Lua5.1 x86|x64 开发环境(Windows Lua LuaRocks msvc)
安装Windows Lua5.1 x86|x64 开发环境 1. 背景 1.1 二进制版本问题 1.2 luajit的兼容性 2.兼容安装Lua5.1 x86 环境 3.编译安装Lua5.1 x64环 ...
- 简述SHELL全局环境变量与局变环境变量
在Linux中,很多程序和脚本都通过环境变量来获取系统信息,存储临时数据,配置信息.环境变量是指用来存储有关shell会话和工作环境信息,允许你在内存中存储数据,以便程序或shell中运行的脚本能够轻 ...
- webstorm配置环境变量_webstorm中配置nodejs环境及npm步骤详细解说
这次给大家带来webstorm中配置nodejs环境及npm步骤详解,webstorm中配置nodejs环境及npm的注意事项有哪些,下面就是实战案例,一起来看一下. --nodejs安装及环境配置 ...
- windows 全局变量_如何在Windows中使用全局系统环境变量
windows 全局变量 Any system administrator who spends a good bit of time in the command prompt or batch s ...
- 如何在 ASP.NET Core 中实现全局异常拦截
异常是一种运行时错误,当异常没有得到适当的处理,很可能会导致你的程序意外终止,这篇就来讨论一下如何在 ASP.Net Core MVC 中实现全局异常处理,我会用一些 样例代码 和 截图 来说明这些概 ...
- 获取异常信息_如何在 ASP.NET Core 中实现全局异常拦截
异常是一种运行时错误,当异常没有得到适当的处理,很可能会导致你的程序意外终止,这篇就来讨论一下如何在 ASP.Net Core MVC 中实现全局异常处理,我会用一些 样例代码 和 截图 来说明这些概 ...
- npm全局环境变量配置及解决VsCode使用时遇到的问题
一.npm全局环境变量配置 1.我们要先配置npm的全局模块的存放路径以及cache的路径 例如我希望将以上两个文件夹放在NodeJS的主目录下,便在NodeJs下建立"node_globa ...
- 深入理解Python中的全局解释锁GIL
深入理解Python中的全局解释锁GIL 转自:https://zhuanlan.zhihu.com/p/75780308 注:本文为蜗牛学院资深讲师卿淳俊老师原创,首发自公众号https://mp. ...
最新文章
- 为什么铝基板无线接受电路板将信号源烧了?
- 原始尺寸_螺母尺寸检测,螺丝螺母外观检测设备
- 机器学习算法源码全解析(二)-范数规则化之L0、L1与L2范数
- 表中的数据导出为insert语句的简单方法
- PIT和TestNG突变测试简介
- mysql 出现 quot_MYSQL 新版出现 Client does_mysql _ 搞代码
- 【网络编程】time_wait状态产生的原因,危害,如何避免
- java多线程 run start_java多线程中run和start区别
- Linked server的一个问题
- python之函数(function)
- java 电子签章 开源_java操作pdf制作电子签章 - CSDN博客
- 微信自定义菜单以及自动回复
- linux zip分卷压缩解压命令
- 【学习笔记】Python_Faker,制造测试数据的第三方库,创建姓名、手机、电话、浏览器头、时间、地址等
- 工作流Airflow的性能优化,应对dag数目的激增
- r语言c函数怎么用,R语言学习笔记——C#中如何使用R语言setwd()函数
- 苯四乙酸 cas1820793-31-4 齐岳中间体|单体材料
- nagios二次开发(四)---nagios监控原理和nagios架构简介
- 我的世界java版怎么选择版本_《我的世界》游戏版本太多,玩家该如何选择?听听老玩家怎么说...
- t3提示本地系统高于服务器,登录T3软件时,提示本地版本高于服务器已升级版本...