Lua 学习笔记——_ENV和_G
2017-08-03 14:08
295 查看
Lua 学习笔记——_ENV和_G
最近在学lua5.3 发现里面的_G和_ENV的概念容易混淆,花了点时间理了一下,现在做个笔记以防后面忘记,直接用代码例子说明test_env.lua:
local local_var = "local_var" -- 该变量为该模块的局部变量 global_var = "global_var" -- 该变量为全局变量注册在 _G 中 -- print("_ENV.local_var:", _ENV.local_var) -- 这句证明 local 变量不存在于 _ENV 中 test_env = {} -- 如果这里设为 local 则不能在 require 一次后在其他文件中直接调用 test_env 后面会说明 setmetatable(test_env, {__index = _G}) -- 设置 _G 是为了使用 print 函数还有验证上面的 global_var _ENV = test_env -- 改变当前环境 local env_local_var = "env_local_var" env_globar_var = "env_global_var" -- 注意这里不是存在 _G 而是在 _ENV print("local_var:", local_var) print("global_var:", global_var) print("env_local_var:", env_local_var) print("env_global_var:", env_global_var) print("test_env:", test_env) print("_G:", _G) print("_G.local_var = nil result:", _G.local_var) print("_G.global_var = global_var result:", _G.global_var) print("_G.test_env = test_env(addr) result:", _G.test_env) print("_G.env_local_var = nil result:", _G.env_local_var) -- 该变量为局部变量所以 _G 中没有 print("_G.env_global_var = nil result:", _G.env_global_var) -- 该变量在 _ENV 中 print("_ENV._G = _G(addr) result:", _ENV._G) print("_ENV.local_var = nil result:", _G.local_var) print("_ENV.env_local_var = nil result:", _ENV.env_local_var) print("_ENV.env_global_var = env_global_var result:", _ENV.env_global_var) return test_env
test.lua:
local env = require "test_env" print("") print("") print("env: ", env) print("test_env: ", test_env) print("_G.test_env: ", _G.test_env) print("env.local_var = nil result:", env.local_var) print("env.global_var = global_var result:", env.global_var) -- 这里的 global_var 其实是 _G.global_var print("_G.global_var = global_var result:", _G.global_var) print("env.env_local_var = nil result:", _G.env_local_var) print("env.env_global_var = nil result:", _G.env_global_var) print("test_env.env_local_var = nil result:", test_env.env_local_var) -- 这里是 _G.test_env.env_local_var print("test_env.env_global_var = env_global_var result:", test_env.env_global_var) -- 这里是 _G.test_env.env_local_var 如果test_env.lua中 test_env 变量前面加上 local 这里就不能这么用
相关文章推荐
- lua学习笔记—table
- Lua入门系列----pil学习笔记之Type and Values (2)
- Lua学习笔记
- Lua学习笔记之数据结构
- lua学习笔记3之数组与结构
- lua学习笔记
- 编译原理之学习 lua 1.1 笔记 (二) 函数调用与局部变量
- Lua学习笔记六——package
- Lua学习笔记2--变量域和流程控制
- [Lua] Lua学习笔记(一) 安装调试环境
- lua学习笔记——开发工具准备
- Lua学习笔记(2)
- 5.lua学习笔记:函数
- Lua学习笔记(一):类型和值
- lua学习笔记.md
- 8.lua学习笔记:协程
- Nginx+Lua学习笔记-环境搭建
- lua 学习笔记 二
- 【学习笔记】系列七:Lua 语言 15 分钟快速入门
- Lua学习笔记一