Lua闭包 --当一个函数内部嵌套另外一个函数定义时,内部的函数体可以访问外部的函数的局部变量,这种特征为词法定界.--闭包是由函数与其相关的引用环境组合而成的实体 闭包=函数+引用环境--不是在局部作用范围内定义的一个变量,同时,它又不是一个全局变量 --upvalue 由于有了这样的一种变量存在,所以就有了lua中的闭包--上面那个变量主要应用在嵌套函数和匿名函数里.--在lua函数中在定义函数,也就是内嵌函数,内嵌函数可以访问外部函数已经创建的所有“局部变量”,而这些变量就被称为该内嵌函数…
闭包的一个重要场景,形成一个自治的环境, 让操作可以封闭运行, 即函数运行时有状态的,可以从闭包创建时候的环境独立开来. 例如下面的lua闭包, genFilter 其入参parmIn是 函数的内部变量, 当genFilter被调用时候, 产生的filter闭包,由于使用了 parmIn, 而使得parmIn成为闭包的环境存在. 跟实际入参的 dtype 分离, 其改变不影响闭包变量. ; local function genFilter (parmIn) local function filt…
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在上一节<Lua和C++交互 学习记录之八:注册C++类为Lua模块>里介绍了在Lua中以模块的方式使用C++注册的类. 下面将其修改为熟悉的面向对象调用方式. 1.Lua中面向对象的方式 ①在Lua中使用student_obj:get_age()其实相当于student_obj.get_age(s…
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1.C++中学生Student类 ①头文件Student.h #pragma once #include <iostream> #include <string> class Student { public: //构造/析构函数 Student(); ~Student(); //get…
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1.将C++封装为模块 ①在Lua中调用的函数(和上一节的函数一样) int average(lua_State* L){ //stack_dump(L); //lua->stack,得到Lua调用函数输入的个数 int lua_args_count = lua_gettop(L); //lua->…
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1.C++调用Lua中函数 ①Lua中的函数 function add(x,y) return x + y end ②C++调用函数 //lua->stack,全局函数位置-1 lua_getglobal(L, "add"); //c->stack,传入函数参数 lua_push…
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1.数组 ①数组是key值从1开始并连续递增的table. ②索引号是从1开始,不是从0开始. 2.既然是table,那当然是可以用上一节的内容进行读写的. lua还提供了一些只针对数组进行操作的API,如下: ①LUALIB_API lua_Integer (luaL_len) (lua_State *L,…
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1.C++读取Lua中的table ①在hello.lua中设置一个全局table: global_c_read_table = {integer_val = ,double_val = 2.34,string_val = "test_string"} ②在C++中读取 //lua->…
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1.C++读取lua中的值 ①在hello.lua中设置一个全局变量: global_c_read_val = "test val" ②在C++里读取 //lua->stack lua_getglobal(L, "global_c_read_val"); //sta…
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1.理解栈 ①C++通过lua虚拟机中的栈和lua进行交互.(相当于一个中间层) ②C++自己管理内存:lua自动垃圾回收:虚拟机知道在栈里的数据是否有被外部宿主程序使用,从而决定是否进行GC; ③C++的是静态类型:lua是动态类型:通过对静态类型的结构封装类似“Lua_Value”的类型,就能将数据放到栈中…