【!!! 注意区分 lua table 变量的【原地修改】与【重新赋值】】教程文章相关的互联网学习教程文章

Torch-RNN运行过程中的坑 [1](读取Lua非空table,size为0)【代码】

0、踩坑背景执行Torch-RNN的时候,在LanguageModel.lua中的encode_string函数中,对start_text的各个character进行id映射编码,实现功能类似“北京天安门”-->“5 10 88 32 111”,方便后面的计算。这个函数会利用一个全局的类似HashMap的table,hashmap中的key是character(char),value是id(int),涉及到一个从hashmap中按照key取值的操作,代码如下:local idx = self.token_to_idx[token] assert(idx ~= nil, ‘Got invalid idx...

lua中,两种json和table互转方法的效率比较【代码】

lua中json和table的互转,是我们在平时开发过程中经常用到的。比如:在用lua编写的服务器中,如果客户端发送json格式的数据,那么在lua处理业务逻辑的时候,必然需要转换成lua自己的数据结构,如table。此时,就会用到table和json格式的互转。在用lua编写的服务器中,如果我们通过redis来存储数据,由于redis中不存在table这种数据结构,因此,我们可以选择将table转换成json字符串来进行存储。在数据的存取过程中,也会用到table和...

Lua的Table表使用例子(便于使用查询)【代码】【图】

一、table.insert()1.11local countries = {"China", "England", "Brazil"} 2--尾插法(Pos不填,默认插入尾部)3table.insert(countries, "France") 4--头插法(首部插入)5table.insert(countries, 1, "Australia") 67 dump(countries)二、table.remove()2.11local countries = {"China", "England", "Brazil", "England"} 2 table.removeItem(countries, "England", true) 3 dump(countries)2.21local countries =...

lua table vs closure【代码】

最近在重构自己写的框架中的定时器模块,需要把回调函数保存起来,大概如下:function timer_mgr:save_timer( this,callback )return { this = this,callback = callback} end-- 创建新定时器 -- @after:延迟N秒后启动定时器 -- @repeated:N秒循环 -- @this:回调对象 -- @callbakck:回调函数function timer_mgr:new_timer( after,repeated,this,callback )local timer_id = self:next_id()self.timers[timer_id] = save_timer( thi...

Lua教程之弱引用table

这次要介绍的内容比较少,就一个——弱引用table1.无法超越人类智慧的智能——自动内存管理的缺陷我们都知道,Lua是具备自动内存管理的,好吧,也许有些朋友不知道。我们只管创建对象,无须删除对象(当然,对于不要的对象你需要设置一下nil值),Lua会自动删除那些被认为是垃圾的对象。问题就出现在,什么对象才是垃圾对象,有些时候,我们很清楚某个对象是垃圾,但是,Lua却无法发现。 比如这样一个例子:复制代码 代码如下: t...

lua中使用table实现类和继承【代码】

--因为只有当读写不存在的域时,才会触发__index和__newindex classA = {className = "classA",name="classAInst"} function classA:new(newobject)newobject = newobject or {}setmetatable(newobject, {__index = self})--当在newobject找不到key对应的value时,就到self(即classA)类中查找return newobject endfunction inherit(p)local newclass = {className = "classB",parent = p}setmetatable(newclass,{__index=p})--当在...

cocos lua绑定感悟---tolua_isusertable及lua如何访问cocos静态函数的方法【代码】

现在还是个新手,对很多还不是很了解,所以语言估计会有点晦涩,望原谅啊!!<pre name="code" class="html">TOLUA_API int tolua_isusertable (lua_State* L, int lo, const char* type, int def, tolua_Error* err) {if (def && lua_gettop(L)<abs(lo))return 1;if (lua_isusertable(L,lo,type))return 1;err->index = lo;err->array = 0;err->type = type;return 0; }static int lua_isusertable (lua_State* L, int lo, const...

lua 打印一个table的实现【代码】【图】

print("-------------Test-----------------")local tb = {}function printProperties(t, csp)local parentOffset = csp or ""local propertyOffset = parentOffset .. "\t"local str = ""str = str .. "{" .. "\n"for k, v in pairs(t) doif type(v)=="table" thenstr = str .. propertyOffset.. k .. " = " .. printProperties(v, propertyOffset) .. ",\n"elsestr = str .. propertyOffset.. k .. " = ‘" .. v .. "‘,\n"enden...

Luadumptable(相仿PHP中的print_r/var_export)

Lua dump table(类似PHP中的print_r/var_export)会PHP的人都知道PHP中的print_r/var_export函数,可以方便的用于打印数组或导出变量,Lua中没有提供,实际应用中却是很多时候需要类似的功能。今天便封装了个简单函数,实现类似功能,用来打印/导出table:-- dump.lua--[[dump对象@param mixed obj@return string]]function debug.dump(obj) local getIndent, quoteStr, wrapKey, wrapVal, dumpObj getIndent = function(leve...

lua-redis中redis数据(table)转换成json

通过lua-redis获取的hash数据中key,val并非对应关系,数据结构如下1 key12 val13 key24 val2为了便于其他语言程序拿到式化的数据,需要将其转换为json,让key和val对应起来,程序中做了如下修改(lua)for k,v in pairs(ok) dofor key,val in pairs(v) doif key%2 == 0 thentmp[v[key-1]] = v[key];endendret[k]=tmp;endngx.say(cjson.encode(ret));之后就可以被其他语言解析出来了以上就介绍了lua-redis中redis数据(table)转换成j...

Lua中table内建排序与C/C++/Java/php/等内排序算法的排序效率比较

Lua这类脚本语言在处理业务逻辑作为配置文件的时候方便省事 但是在大量需要 运算的地方就显得略微不足 按照 Lua内建排序算法 对比C/C++ PHP Java等的快速排序算法进行一下比较。 快速排序算法是基于冒泡排序,优化而来,时间复杂度T(n)=O(nLog2n) ,可见内部采用了二分策略 。 发现在LuaIDE LDT下直接运行效率要比 通过C++加载运行Lua脚本效率高的多 拿500W个数据排序 来说 ,脚本如下 同样的排序脚本Lua解释器的内置排序算...

链接器错误Lunatic Python lua.require(‘socket’) – >未定义的符号:lua_getmetatable【代码】

我有一个python项目依赖于一些lua文件,其中一个需要’socket’.当我尝试从python 2.7中请求lua文件时,我收到socket.core“undefined symbol:lua_getmetatable”时出错. 简单的再现者:$python Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) [GCC 4.5.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import lua >>> lua.require('socket') Traceback (most recent call last):F...

!!! 注意区分 lua table 变量的【原地修改】与【重新赋值】【代码】

例一:local a,ba = {5}b = aa = nilprint(b[1]) ----结果为: 5 关键在于:等号是赋值语句!a = nil 这句指令是使 变量 a 的指针重新指向 nil; 而不是清空了原来 table 的那块内存。 所以变量 b 的指针仍然指向原来的 table; 也就是说,原来的那个table 的引用计数 从2 减为 1 。 例二:local a,ba = {5}b = aa = {10}print(b[1]) ----结果为: 5 道理是一样的, a = {10} 这句指令,是 new 了一个新的 table,把它的...