Lua 之table库】的更多相关文章

标准table库 table.concat(table, sep,  start, end) concat是concatenate(连锁, 连接)的缩写,table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素,元素间以指定的分隔符(sep)隔开.除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符,start的默认值是1,end的默认值是数组部分的总长. sep, start, end这三个参数是顺序读入的,所以虽然它们都不是必须…
table属性 table库是有一些辅助函数构成的,这些函数将table作为数组来操作. 当中.有对列表中插入和删除元素的函数,有对数组元素进行排序的函数.还有对链接一个数组中全部字符串的函数. 0.table.getn()Lua 中我们常常假定 array 在最后一个非 nil 元素处结束. 也就是nil值后的元素不读取 这个传统的约定有一个弊端:我们的 array中不能拥有 nil 元素. 对大部分应用来说这个限制不是什么问题.比方当全部的 array 有固定的类型的时候. 但有些时候我们的…
lua提供了一些辅助函数来操作table. 比如,从list中insert和remove元素,对array的元素进行sort.或者concatenate数组中的全部strings.以下就具体地解说这些方法. insert and remove table.insert将一个元素插入到指定位置.比如: t = {1, 2, 3} table.insert(t, 1, 4} t的结果将是{4, 1, 2, 3} insert的第二个參数是能够省略的.这样就会插入到数组的最后,从而不必移动其它元素.相…
函数列表: table.insert(table,[ pos,] value) table.remove(table[, pos]) table.concat(table[, sep[, i[, j]]]) table.sort(table[, comp]) 1. insert 和 remove 只能用于数组元素的插入和移出, 进行插入和移出时,会将后面的元素对齐起来.     所以在 for 循环中进行 insert 和 remove 的时候要注意插入和移除时是否漏掉了某些项:        …
table是Lua语言中的一种重要的数据类型, table 的一些特性简单列举如下: (1).table 是一个“关联数组”,数组的索引可以是数字或者是字符串; (2).table 的默认初始索引一般以 1 开始; (3).table 的变量只是一个地址引用,对 table 的操作不会产生数据影响; (4).table 不会固定长度大小,有新数据插入时长度会自动增长; (5).table 所有索引值都需要用 “[“和”]” 括起来:如果是字符串,还可以去掉引号和中括号: 即如果没有[]括起,则认…
table库是由一些辅助函数构成,把table作为数组来操作,所有的函数都忽略传入参数的那张表中的非数字键. 无论如何,若一个操作需要取表的长度,这个表必须是一个真序列,或是拥有__len元方法. 提供了这样一些功能:从列表中插入和删除元素.对元素排序.连接一个数组中所有字符串. 插入和删除 函数table.insert用于将一个元素插入到一个数组指定位置,然后移动后续元素. 例如数组t = {10,20,30},当调用table.insert(t,1,15)后,t = {15,10,20,30…
项目中部分只读表易被人误改写,故决定在非线上环境里对这些表附加只读属性,方便在出现误改写的时候抛出lua错误,最终版代码如下: --[[------------------------------------------------------------------------------ -** 设置table只读 出现改写会抛出lua error -- 用法 local cfg_proxy = read_only(cfg) retur cfg_proxy -- 增加了防重置设置read_o…
本来这些文章都是在我的个人网站www.zhangyi.studio,目前处在备案状态,暂时访问不了,所以搬到这边.  最近这两天需要弄清楚C++和lua间相互调用和数据传递,废话不多说,直接上过程. 首先是环境环境,Linux(Debian),安装lua,注意需要管理员权限. 安装完后输入lua或者lua -v 严重是否安装成功以及安装的版本,当然,有了lua运行环境还不够我们还需要安装lua开发库既然我们安装的是lua5.2那么开发库同样安装成5.2版本,命令如下: -dev 当然,lua的环…
开发环境:vs2012 lua版本:LuaJIT-2.0.2 lua文件作为配置文件,c++读取这个配置. lua配置结构如下 SceneConfig = { [] = { name =}, [] = } 我们读取SceneConfig[1].name的值,这是一个嵌套的table int main() { lua_State *luaState = lua_open(); // 创建 Lua 状态. 其实就是一个数据结构. luaL_openlibs(luaState); // 加载所有标准库…
luna工具库 概述 luna库提供了几个lua开发的常见辅助功能: lua/c++绑定 lua序列化与反序列化 变长整数编码,用于lua序列化,当然也可以方便的用于其他场合 这里把代码编译成了动态库,由于代码非常简单,实际使用时也可以简单的复制文件到自己的工程.lua_archiver引用了lz4库用于数据压缩(lz4.h+lz4.c). lua/c++绑定库(luna.h, luna.cpp)支持Windows, Linux, macOS三平台,默认的luna.h实现需C++14支持.如果编…
目录结构 LuaSocket 是 Lua 的网络模块库,它可以很方便地提供 TCP.UDP.DNS.FTP.HTTP.SMTP.MIME 等多种网络协议的访问操作. 它由两部分组成:一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持.另外一部分是用 Lua 写的,负责应用功能的网络接口处理. 一.安装LuaSocket 下面介绍两种安装方法 第一种方法:如果你有安装了 Lua 模块的安装和部署工具 LuaRocks,那么一条指令就能安装部署好 LuaSocket: # lua…
小伙伴们再也不用为打印lua的Table对象而苦恼了, 本人曾也苦恼过,哈哈 不过今天刚完成了这个东西, 以前在网上搜过打印table的脚本,但是都感觉很不理想,于是,自己造轮子了~ 打印的效果,自己感觉还比较慢,不敢私藏,赶紧分享... 如有更好的更改,欢迎讨论,优化!!! 以下脚本保存到文件"dumpTable.lua" 之后要使用 直接加载就行了: --- -- @function: 获取table的字符串格式内容,递归 -- @tab: table -- @ind:不用传此参数…
前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 "lua: attempt to yield across metamethod/C-call boundary"的错误(据悉主线程中调用yield也会如此). 于是就想使用5.2以上的版本试试;windows下没有5.2以上的版本,又不愿意使用VS编译出lua.exe;就在网上搜索下了关于使用命令行生成lua的静态库.动态库.lua.exe和luac.exe资…
lua,一款很轻量级很nice很强大的脚本语言,做为lua中使用最为频繁的table表,在使用之时还是有颇多的好处与坑的: 下面是大牛 云风的一片关于lua table的blog,可使得对lua table内在机制 窥测一二: lua 的整体效率是很高的,其中,它的 table 实现的很巧妙为这个效率贡献很大. lua 的 table 充当了数组和映射表的双重功能,所以在实现时就考虑了这些,让 table 在做数组使用时尽量少效率惩罚. lua 是这样做的.它把一个 table 分成数组段和 h…
lua weak table 经常看到lua表中有 weak table的用法, 例如: weak_table = setmetatable({}, {__mode="v"}) 官网上的解释: http://www.lua.org/pil/17.html Weak tables are the mechanism that you use to tell Lua that a reference should not prevent the reclamation of an obje…
转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对lua中的常用方法特定编写,从而实现对table的重构. table中关键的一点是使用setmetatable和getmetatable,分别是对table进行元表设置和读取. 一.lua中table的元方法 table中的元方法主要分为算术类和关系类的元方法,算数类元方法可以分为:加(_add).减…
转载请标明出处http://www.cnblogs.com/zblade/ lua作为游戏的热更新首选的脚本,其优势不再过多的赘述.今天,我主要写一下如何重写lua中的元方法,通过自己的重写来实现对lua中的常用方法特定编写,从而实现对table的重构. table中关键的一点是使用setmetatable和getmetatable,分别是对table进行元表设置和读取. 一.lua中table的元方法 table中的元方法主要分为算术类和关系类的元方法,算数类元方法可以分为:加(_add).减…
Lua 内table遍历 在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: 1. ipairs for index, value in ipairs(table) do end 注:这种方式的遍历只会从key为1的地方开始,一直以key递增1的顺序来遍历,若找到一个递增不是1的key就结束遍历,无论后面是否仍然是顺序的key. --Sample_1: local tab1 = { [] = , [] = , [] = , [] = , } f…
网上搜索C.C++调用lua函数,有一大堆复制粘贴的. 但是搜索<C调用lua的table里面的函数> 怎么就没几个呢? 经过探索,发现其实逻辑是这样的: 1.根据name获取table :并判断是否为table 2.根据 name2 获取table的成员变量或方法,并判断栈顶的是否为函数 3.将函数的参数压栈,然,没有可以传入一个nil: 4.调用lua_pcall 跟调用普通lua函数的方法就一样了. 代码如下: bool call_table_func(const char * tabl…
lua 的整体效率是很高的,其中,它的 table 实现的很巧妙为这个效率贡献很大. lua 的 table 充当了数组和映射表的双重功能,所以在实现时就考虑了这些,让 table 在做数组使用时尽量少效率惩罚. lua 是这样做的.它把一个 table 分成数组段和 hash 段两个部分.数字 key 一般放在数组段中,没有初始化过的 key 值全部设置为 nil .当数字 key 过于离散的时候,部分较大的数字 key 会被移到 hash段中去.这个分割线是以数组段的利用率不低于 50% 为…
C++代码: // LuaAndC.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <string.h> using namespace std; extern "C" { #include "lua.h" #include "lauxlib.h" #include "lualib.h"…
推荐阅读:  我的CSDN  我的博客园  QQ群:704621321  我的个人博客 方法一 用过lua的人都知道,lua的table中不允许存在相同的key,利用这个思想,我们可以将原始table(记作table1),用一个新的table(记作table2)来存放,存放得时候将table1的value作为table2得key,将值赋为true,最后只需要遍历table2,将其的key保存在一个新的table(记作table3)里. 例如:原始table1={1,2,3,4,5,2,3} lo…
lua中 table.getn(t) .#t. table.maxn(t) 这三个什么区别? RTlocal t = {1,888,x= 999,b=2,5,nil,6,7,[10]=1,8,{z = 1,y = 1},nil,nil} print(table.getn(t))print(#t)print(table.maxn(t)) 输出:8 8 8------------如果把[10] =1 改成[11] =1 那么输出8 8 11 这又是为什么?       1个回答   ==1== ta…
这个库提供了表处理的通用函数. 所有函数都放在表 table. 无论何时,若一个操作需要取表的长度, 这张表必须是一个真序列. table.concat(list, [, sep, [, i , [, j]]]) 提供一个列表,其所有元素都是字符串或数字,返回字符串 list[i]..sep..list[i+1] ··· sep..list[j]. sep 的默认值是空串, i 的默认值是 1 , j 的默认值是 #list . 如果 i 比 j 大,返回空串. sep为元素之间的间隔符 loc…
  整理自:http://www.cnblogs.com/whiteyun/archive/2009/08/10/1543139.html 1.table.concat(table, sep,  start, end) concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开.除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, s…
标准string库 基础字符串函数 string.len(s) 返回一个字符串的长度,例如 string.rep(s, n) 返回一个新的字符串,该字符串是参数s重复n次得到的结果,例如 )) -- gogogo string.lower(s) string.upper(s) 字符串大小写转换,例如 print(string.lower("gOogLe")) -- google print(string.upper("gOogLe")) -- GOOGLE stri…
这里只介绍和插件编写比较有关的几个函数. 详细的Lua手册请参照Lua Reference Manual 5.1. table函数库 一部分的table函数只对其数组部分产生影响, 而另一部分则对整个table均产生影响. 下面会分开说明. table.concat(table, sep,  start, end) concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定…
lua原生解释器对字符串的处理能力是十分有限的,强大的字符串操作能力来自于string库.lua的string函数导出在string module中.在lua5.1,同一时候也作为string类型的成员方法,因此,我们既能够写成string.upper(s), 也能够s:upper(),选择你喜欢的写法. string.len(s)返回s的长度. string.rep(s, n)返回反复s字符串n次的字符串. string.lower(s)返回一份已将大写转成小写的字符串s的拷贝  lower,…
[前言] 在<Lua中的一些库(1)>中也说到了,要对string库的模式匹配进行单独的讲解.对于字符串的处理,对于任何语言的学习来说,都是一个难点,而且也是一个必会的知识点.给你一个字符串,让你按照某种需求进行处理,你不会,那是多么尴尬的一件事情.所以,看完<Lua中的一些库(1)>和这篇文章之后,我争取做到让你在处理字符串时,不再感到捉襟见肘,不再尴尬. 说到Lua中的模式匹配,基本上就是围绕着以下几个函数展开的: find: match: gsub: gmatch. 我的总结…
Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表达式a+b.当Lua试图将两个table相加时,它会先检查两者之一是否有元表,然后检查该元表中是否存在__add字段,如果有,就调用该字段对应的值.这个值就是所谓的“元方法”,这个函数用于计算table的和.    Lua中每个值都有一个元表.table和userdata可以有各自独立的元表,而其它数据类型的值则共享其类型所属的单一元表.缺省情况…