类型与值
lua是动态类型的语言,没有类型定义的语法,每个值自带类型信息,有八种基础类型
用type函数可以返回值类型名称
nil(空)
nil表示空主要功能是用nil区别于其他正常的返回值
boolean(布尔)
boolean有两个值:true和false
boolean不是条件值的唯一表达方式
在lua中任何值都可以表示一个条件,将none和nil视为假,除此之外的值都视为真。
不同于其他脚本语言的是lua将数字0和空字符串都视为真
number(数字)
number表示实数和双精度浮点数
在lua中没有整数类型,因为没有必要
书写一个数字类型时可以用普通写法也可以用科学计数法
string(字符串)
lua中的字符串通常表示一个字符序列,完全采用8位编码
字符串字符可以具有任何数值编码包含数字0,也就是可以将任意二进制数据存储到字符串中;
lua字符串是不可变的值,不可以像C语言一样直接修改字符串的某个字符,可以根据要求创建新的字符串
如下图可以用gsub将字符串中某些字符换成别的:
lua字符串和table、function一样都是自动内存管理机制,所以无需担心字符串的分配和置换
可以小到一个字母,大到包含整书,lua可以很方便地处理长字符串
定义字符串需要单引号或双引号来界定,如果字符串中本身具有单双引号可以用反斜杠转义
lua中的转义序列:
\a:响铃
\b:退格
\f:表示提供表格
\n:表示换行
':本身就需要显示单引号
":本身就需要显示双引号
\r:回车
\:本身就需需要显示斜杠
\t:水平tab
<ddd>:通过数值来指定字符串字符
[[:界定一个范围的字符串,不会识别其中的反斜杠或引号
lua提供了运行时的数值和字符串的自动转换
lua通过…进行字符串连接
lua在字符串前加#操作符可以获得该字符串的长度
table(表)
table实现了关联数组,关联数组即具有特殊索引方式的数组,不仅可以通过整数进行索引还可以通过字符串等当然不包括nil
table没有固定的大小,可以动态添加任意数量的元素
table是lua的主要数据结构,具有强大的功能,基于table可以用一种简单统一高效的方式来表示普通数组、符号表、集合、记录、队列等其他数据结构
用table表示模块包合对象
table既不是值也不是变量而是对象,可以将table视为动态分配的对象,程序仅对table进行引用
lua不会暗中产生table的副本
不需要声明一个table,创建通过构造表达式{}来完成
因为table是引号所以跟table变量名没有太大关系,当没有变量对table进行引用时lua垃圾收集器会自动删除该table,并且释放内存
a[“name”]与a.name是等效的
用#+变量名可以打印table长度
要删除table中的某个值只需要设置为nil即可
function(函数)
在lua中函数作为第一类值看待,函数可以存储在变量中,可以将函数传给其他函数也可以将函数作为其他函数的返回值使语言具有极大的灵活性
lua既可以调用自身编写的函数也可以调用C语言编写的函数
lua所有标准库都是由C语言编写的包括(table,string,io,math,base,debug等)
userdata(自定义类型)
可以将任意C语言类型存储到lua变量中
在lua中userdata没有太多预定义操作,只能进行赋值和相等性测试
用于存储应用程序或C语言库创建的新类型比如io库、输入输出库等用userdata表示文件
thread(线程)
|
请发表评论