setenv是在lua5.1中有的改变函数作用域的函数。

用法是setenv(func or number,tbl),第一个参数可以是数字也可以是函数,数字1表示当前的作用于,2表示上一层的作用域,特殊情况0,setfenvchanges the environment of the running thread. In this case,setfenv returns no values.此时是不返回的,其他情况都返回第一个参数指向的函数(被他坑了好久,以为不返回!!因为我只看文档的最后也就是0的特殊情况!!!)

可以用来做模块加载来使用

[plain] view plaincopy
  1. local FuncEnv={}
  2. setmetatable(FuncEnv, {__index = _G})
  3. local func=loadfile("a.lua")
  4. setfenv(func,FuncEnv)()--等价于setenv(func,FuncEnv);func();
  5. FuncEnv.Test()--FuncEnv就是新的模块啦,可以用其中的函数啦,其实,lua内部的model命令或者函数也是用的这个原理

其中a.lua为如下:

[plain] view plaincopy
  1. function test()
  2. print("Test")
  3. end

setenv setfenv相关推荐

  1. 多线程中使用mktime和setenv函数

    在编写ATS插件的过程中,发现使用mktime会偶尔出现段错误, 经过网上调研,发现mktime等函数不是线程安全的, 于是编写下面的代码进行测试. 注意加锁和不加锁区别很大, 在mktime中使用多 ...

  2. lua的table+setfenv+setmetatable陷阱

    --file1.lua x  = funciton() print("this is x") end ------------- --file2.lua local t = {} ...

  3. 解决:未找到setenv命令

    转自:一叶梧桐 在Ubuntu12.04中配置python环境变量:setenv PATH "$PATH:/usr/local/bin/python",提示未找到setenv命令. ...

  4. 设置函数环境——setfenv

    当我们在全局环境中定义变量时经常会有命名冲突,尤其是在使用一些库的时候,变量声明可能会发生覆盖,这时候就需要一个非全局的环境来解决这问题.setfenv函数可以满足我们的需求. setfenv(f, ...

  5. 进程环境详解(四)---getenv、putenv和setenv函数详解

    在Linux中的c程序的典型内存分布中,之前提到的有 text段.data段.bss段.堆和栈这几部分,在笔记"麦子学院c语言->典型c语言程序的c内存分布"中介绍了.但是其 ...

  6. linux编程:getenv,putenv,setenv

    1.getenv 头文件 #include<stdlib.h> 函数原型 char * getenv(const char *name); 函数说明 getenv()用来取得参数name环 ...

  7. 2通过程序获得环境变量,getenv(),setenv()函数和unsetenv()函数,env查看环境变量,echo输出指定的环境变量

     1进程环境 libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明.例如: 运行结果: 2.env命令可以查看进程信息 3. ...

  8. 设置函数环境——setfenv(转)

    当我们在全局环境中定义变量时经常会有命名冲突,尤其是在使用一些库的时候,变量声明可能会发生覆盖,这时候就需要一个非全局的环境来解决这问题.setfenv函数可以满足我们的需求. setfenv(f, ...

  9. C++:getenv setenv -- 获取设置系统环境变量

    C++:getenv & setenv -- 获取&设置系统环境变量 1. getenv:取得环境变量内容 头文件- #include<stdlib.h> 格式: char ...

最新文章

  1. Git 历险记(三)——创建一个自己的本地仓库
  2. Kafka如何通过精妙的架构设计优化JVM GC问题
  3. 获取redis实例绑定cpu的情况
  4. How is SAP UI5 Aggregation designed
  5. HTML的footer置于页面最底部
  6. 加密原理公钥私钥CA
  7. 2015.5.6(servlet基础)
  8. 韩语在线翻译图片识别_一键截图识别屏幕文字,支持实时翻译还能朗读
  9. leetcode刷题之 两数之和
  10. I2S,PCM,IOM-2,I2C,SPI,UART,GPIO
  11. 介绍4个大神常用而你不常用的python函数--assert,map,filter,reduce
  12. ofo生死局:拿什么续命?
  13. 中国五千年统一与分裂
  14. python jinja2_Python模块学习 - jinja2
  15. 【HTML】讲讲对HTML5的语义化的理解
  16. python识别字母代码_【Python-Opencv】KNN英文字母识别
  17. linux系统修改启动logo的步骤
  18. Android 项目必备(二)--> 启动页 引导页
  19. cython 安装升级_浅尝Kivy
  20. 跟我20天学Java:01-计算机基础以及JDK、IDEA等安装详解

热门文章

  1. AD操作整理(部分)
  2. 电脑台式计算机描述不可用,【计算机描述不可用】计算机描述不可用步骤_计算机分级不可用-系统城...
  3. 记一次数据结构与算法作业:利用循环和递归输出1-N的正整数的程序分析比较
  4. 这些新规今起实施:侵犯民警执法权威或被追刑责
  5. vs-debugger远程调试卡死解决
  6. Double值取得小数点后两位的若干方法
  7. 批量将word转换成excel格式的方法
  8. 在线IDE- Gitpod介绍
  9. Bert入门学习过程记录
  10. Python-Opencv 基本操作(三)