Lua 学习之基础篇二<Lua 数据类型以及函数库 汇总>
引言
前面讲了运算符,这里主要对Lua的数据处理相关的数据类型和函数库进行总结归纳,后面会再接着单独分开讲解具体使用。
首先因为Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。
Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。
| nil | 这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false) |
|---|---|
| boolean | 包含两个值:false和true |
| number | 表示双精度类型的实浮点数 |
| string | 字符串由一对双引号或单引号来表示 |
| function | 由 C 或 Lua 编写的函数 |
| userdata | 表示任意存储在变量中的C数据结构 |
| thread | 表示执行的独立线路,用于执行协同程序 |
| table | Lua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。 |
其他函数库部分如下:
Part 1. String
| 字符串库 (均以"string."开头) | |
|---|---|
| byte(s[,i[,j]]) | 返回字符串的内部数字编码,i、j为字符串的索引,i和j限定了多少字符就返回多少值 |
| char(…) | 吧数字编码转换为字符串 |
| dump(function[,strip]) | 序列化函数,返回一个字符串,使用load可以反序列化该函数 |
| find(s,pattern[,init[,plain]]) | 用来查找匹配的pattern,返回该pattern的索引,找到一个匹配就返回,如果找不到,返回nil |
| format(formatstring[,value[,…]]) | 格式化字符串 |
| match(s,pattern[,init]) | 与find相同,不同在于这个返回第一个匹配的内容 |
| gmatch(s,pattern) | 返回一个迭代器函数,每次调用这个迭代器函数都会返回一个匹配该字符串的值 |
| gsub(s,pattern,repl[,n]) | 将每个匹配pattern的字符串替换为repl,返回替换完毕的字符串和替换次数,如果repl为函数,则用匹配到的参数作为参数调用这个函数,如果是表,则用匹配到的参数作为键去查找这个表 |
| len(s) | 返回字符串的长度 |
| lower(s) | 将字符串转换为小写 |
| upper(s) | 将字符串转换为大写 |
| rep(s,n[,sep]) | 将某个字符串自我复制链接起来,n是次数,sep为连接符 |
| reverse(s) | 反正字符串 |
| sub(s,i[,j]) | 截取字符串,i为起始,j为结束 |
Part 2. Math
| 数学库(均以“math.”开头) | |
|---|---|
| abs (x) | 取绝对值 |
| acos(x) | 反余弦函数 |
| asin(x) | 反正弦函数 |
| atan2(x,y) | x/y的反正切值 |
| atan(x) | 反正切函数 |
| ceil(x) | 不小于x的最大整数 如:x =5.8 返回 6 x=-3.5 返回3 |
| cosh(x) | 双曲线余弦函数 |
| cos(x) | 余弦函数 |
| deg(x) | 弧度转角度 |
| exp(x) | 计算以e为底x次方值 |
| floor(x) | 不大于x的最大整数 |
| fmod(x,y) | 取模运算 |
| frexp(x) | 把双精度数val分解为数字部分(尾数)和以2为底的指数n |
| ldexp(x,y) | 计算value*2的n次方 |
| log10(x) | 计算以10为基数的对数 |
| log(x) | 计算一个数字的自然对数 |
| max(…) | 取参数中的最大值 |
| min(…) | 去参数中的最小值 |
| modf(x) | 把数分为整数和小数 |
| pow(x,y) | 得到x的y次方 |
| rad(x) | 角度转弧度 |
| random(x[,y]) | 获取随机数 |
| randomseed(x) | 设置随机数的种子 |
| sinh(x) | 双曲线正弦函数 |
| sinh(x) | 正弦函数 |
| sqrt(x) | 开平方函数 |
| tanh(x) | 双曲线正切函数 |
| tan(x) | 正切函数 |
Part 3. Table
| Table 函数库(均以"table."开头) | |
|---|---|
| concat(table[,sep[,i[,j]]]) | 将table使用sep作为连接进行连接,i和j是限定坐标 |
| insert(table,[pos,]value) | 在的table的pos处插入value,不指定pos会在添加在表的末尾 |
| move(table1,f,e,t[,table2]) | 将元素从table1移动到table2 |
| pack(…) | 获取一个索引从1开始的参数表table,并会对这个table预定义一个字段n,表示该表的长度 |
| remove(table[,pos]) | 移除table中pos上的元素,并返回这个被移除的值 |
| sort(table[,comp]) | 对数组进行排序,没有提供排序函数,默认为<操作 |
| unpack(table[,i[,j]]) | 返回table里的元素 |
| #(table) | 获取table中的元素个数 |
| maxn(table)--已经删除,需要重写maxn方法 | 返回指定table中所有正数key值中最大的key值,如果不存在key值为正数的元素则返回0 |
Part 4. Lua内置函数
| Lua库函数 | |
|---|---|
| assert(v[,message]) | 相当于C的断言功能,当v为nil或者false将处罚错误,message为发生错误时返回的信息 |
| collectgarbage(opt[,arg]) | 用于操作垃圾收集器。opt:操作方法标志(“collect”:做一次完整的垃圾收集循环;“count”:返回当前Lua中使用的内存量(KB);“stop”:停止垃圾收集器;“restart”:重启垃圾收集器;“step”:单步执行一个垃圾收集器,步长“size”由参数arg指定;“setpause”:设置arg/100的值作为暂定收集时长;“setstepmul”:设置arg/100的值,作为步长的增幅) |
| dofile(filename) | 打开并且执行一个lua块 |
| error(message[,level]) | 终止正在执行的函数,并返回message的内容作为错误信息(error函数永远都不会返回),level参数:level=1(默认):为调用error文职(文件+行号) level=2:指出那个调用error函数的函数 level=0:不添加错误位置信息 |
| _G | 全局环境的变量值表 |
| getfenv(f) | 返回函数f的当前环境表 |
| getmetatable(object) | 返回指定对象的元表(如果object的元表__metatable有值,返回__metatable,否则返回nil) |
| load(func[,chunkname]) | 用于加载一个数据块。从字符串或者函数中加载一个代码为方法并返回 |
| loadfile([filename]) | 与load类似,但加载的是一个文件,如果没有指定文件名加载标准输入(stdin)的内容 |
| loadstring(string[,chunkname]) | 与load类型,但加载的一个字符串 |
| next(table[,index]) | 允许程序遍历表中的每一个字段,返回下一索引和该索引的值;table:要遍历的表,index:要返回的索引的前一索引号,当index为nil[]时,返回第一个索引的值,当索引号为最后一个索引或表为null是将返回nil,可以用来判定table是否为nil |
| ipairs(t) | 泛型for迭代器,数组遍历 |
| pcall(f,arg1,…) | 在保护模式调用函数(即发生的错误将不会反射给调用者),当调用函数成功能返回true,失败时将返回false加错误信息 |
| print(…) | 以tostring方式格式化输出参数的内容 |
| rawequal(v1,v2) | 检测v1是否等于v2,此函数不会调用任何元表的方法 |
| rawget(table,index) | 获取表中指定索引的值,此函数不会调用任何元表的发放,成功返回相应的值,当索引不存在时返回nil 注:只能用于以数字索引访问的表 |
| rawset(table,index,value) | 设置表中指定索引的值,此函数不会调用任何元表的方法 |
| select(index,…) | 当index为数字将返回所有index大于index的参数,当index为“#”,返回参数的总个数 |
| setfenv(f,table) | 设置函数f的环境表为table,f可以为函数或调用栈的级别,级别1 为当前的函数,0将设置当前线程的环境表 |
| setmetatable(table,metatable) | 设置指定table的元表metatable,如果当table有__metatable字段时,会触发错误 |
| tonumber(e[,base]) | 将e转换为数字,不能转换返回nil,base(0~36)指出参数e当前使用的进制 |
| tostring(e) | 将参数e转换为字符串,会触发元表__tostring事件 |
| type(v) | 返回参数的类型 |
| unpack(list[,i[,j]]) | 返回指定表的索引的值,i为起始索引,j为结束索引 |
| _VERSION | 返回当前lua的版本号 |
| xpcall(f,err) | 与pcall类似,在保护模式下调用函数,可以指定一个新的错误处理函数句柄 |
Part 5. 元表
| 元表方法 | |
|---|---|
| __add | 运算符+ |
| __sub | 运算符- |
| __mul | 运算符* |
| __div | 运算符/ |
| __mod | 运算符% |
| __unm | 运算符-(取反) |
| __concat | 运算符… |
| __eq | 运算符== |
| __lt | 运算符< |
| __le | 运算符<= |
| __call | 可以让table当做一个函数来使用 |
| __tostring | 转换为字符串 |
| __index | 调用一个索引,可以是表和方法,当调用table的一个不存在引用时,如果__index是一个table,会查找__index元方法表,若有该索引,则返回该索引的值,否则返回nil,如果__index是一个方法,会将table和索引作为参数传递给方法,return一个返回值 |
| __newindex | 给一个索引赋值,当给table中一个不存在的索引赋值时,会调用__newindex方法 |
| 注:rawget和rawset可以直接修改表,不会调用元表的元方法 |
Lua 学习之基础篇二<Lua 数据类型以及函数库 汇总>的更多相关文章
- Lua 学习之基础篇七<Lua Module,Package介绍>
Lua 之Module介绍 包管理库提供了从 Lua 中加载模块的基础库. 只有一个导出函数直接放在全局环境中: [require]. 所有其它的部分都导出在表 package 中. require ...
- Lua 学习之基础篇四<Lua table(表)>
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...
- Lua 学习之基础篇十<Lua 常见的语法规则>
下面讲一些lua 常见的用法和规则,可以为学习理解lua带来帮助,最后附上的部分是lua的基本操作,基本包含所有常用语法语句. 1. if判断 lua把 nil 和false 视为"假&qu ...
- Lua 学习之基础篇一<Lua 运算符>
引言 由于刚接触lua,个人觉得接触一门新语言,就要一定要对基础的部分做一个快速了解. 于是参考网上相关资料吸收并整理下来作为笔记,模糊的时候用来回顾一下. 这些部分基本都是经过自己手动测试梳理过,没 ...
- Lua 学习之基础篇九<Lua 协同程序(Coroutine)>
引言 讲到协程,首先来介绍一下线程和协程的区别 lua协程和多线程 相同之处:拥有自己独立的桟.局部变量和PC计数器,同时又与其他协程共享全局变量和其他大部分东西 不同之处:一个多线程程序可以同时运行 ...
- Lua 学习之基础篇八<Lua 元表(Metatabble)&&继承>
讲到元表,先看一段table的合并动作. t1 = {1,2} t2 = {3,4} t3 = t1 + t2 attempt to perform arithmetic on a table val ...
- Lua 学习之基础篇六<Lua IO 库>
引言 I/O 库提供了两套不同风格的文件处理接口. 第一种风格使用隐式的文件句柄: 它提供设置默认输入文件及默认输出文件的操作, 所有的输入输出操作都针对这些默认文件. 第二种风格使用显式的文件句柄. ...
- Lua 学习之基础篇五<Lua OS 库>
lua os库提供了简单的跟操作系统有关的功能 1.os.clock() 返回程序所运行使用的时间 local nowTime = os.clock() print("now time is ...
- Lua 学习之基础篇三<Lua 字符串操作>
Lua字符串可以使用以下三种方式表示: 单引号间的一串字符. 双引号间的一串字符. [[和]]间的一串字符. string = [["Lua"]] print("字符串 ...
随机推荐
- yarn和npm
Yarn和npm命令对比 npm install === yarn npm install taco --save === yarn add taco npm uninstall taco --sav ...
- 《Mysql - 优化器是如何选择索引的?》
一:概念 - 在 索引建立之后,一条语句可能会命中多个索引,这时,索引的选择,就会交由 优化器 来选择合适的索引. - 优化器选择索引的目的,是找到一个最优的执行方案,并用最小的代价去执行语句. 二: ...
- soapUI对webservices进行压力测试
1.进行压力测试步骤 1.创建soap项目file--new soap project 为项目命名,输入wsdl,之后会出现下图 其中matchToApply是webservice对外提供访问的接口( ...
- PHP生成有背景的二维码图片
Hart QR Code 快速生产带背景的二维码,他为你提供了以下功能 生产原始二维码,可配置url或则text,以及二维码大小 生产带背景带二维码,背景大小是你传入带背景大小,可配置原始二维码大小, ...
- vm启动时通过U盘安装的方法
vm启动时通过U盘安装的方法 增加一个以U盘为硬盘的方法,通过boot中设置该硬盘启动后重新ghost或者安装win10X64位. 在虚拟机中增加一个硬盘,第二部设置为物理硬盘,选在对 ...
- zabbix硬件监控以及服务
大家好今天给大家带来zabbix3.4.8监控主机,那么最近由于我个人的关系.没有及时的更新文章所以,很抱歉那么今天我分享的内容是zabbix3.4.8监控服务器.本章的具体监控服务器如下: 服务器的 ...
- PAT(B) 1018 锤子剪刀布(C:20分,Java:18分)
题目链接:1018 锤子剪刀布 分析 用一个二维数组保存两人所有回合的手势 甲乙的胜,平,负的次数刚好相反,用3个变量表示就可以 手势单独保存在signs[3]中,注意顺序.题目原文:如果解不唯一,则 ...
- go map的定义和使用 键值对存储
定义map var m map[string]int //定义map 初始化map m = make(map[string]int) //初始化map 修改map中ok 的值 m[&qu ...
- Solr介绍 入门练习
1.1 Solr是什么 Solr是一个基于全文检索的企业级应用服务器. 全文检索:可以输入一段文字,通过分词检索数据!!(复习) 应用服务器:它是单独的服务. 1.2 Solr能做什么 它就是用于做全 ...
- VMware Workstation虚拟机安装
VMware Workstation虚拟机安装 我们缺乏资金, 所以吃土.我们想搭 hadoop 集群, redis 集群, k8s 集群, 怎么办? 用虚拟机!! 一. 安装普通版本(Worksta ...