lua学习笔记(三)
2024-09-29 13:01:50
类型与值
lua是一种动态类型的语言,在语言中没有类型定义的语法,每个值都携带了它自身的类型信息
lua中有8种基础类型
nil
只与自身相等assert(nil==nil),空值
boolean
true
false
nil和false是假,其它都是真,0和""都是true
number
浮点实数,没有使用整数
string
8位编码也就是个char
可以包含任何字符,包括\0,很象stl里的string类,可以当二进制流看待
string.len和#返回的是实现长度,不以\0为结束标记
不可以修改字符串变量内容,只能重新赋值
lua能高效的处理大字符串,不用怀疑lua字符串的处理能力
特殊字符与c一样,如换行是\n tab是\t
多行字符串定义[[ ]]
\<ddd>一至三个数据表示字符,ASCII码
在字符串上使用数学运算会先前字符串转换成数字
".."是字符串连接操作符"wang".."ning"
在数字后使用字符串连接操作符".."时,要有一个空格,不然会认为是小数点
尽量不要依赖lua的自动类型转换,可以使用tostring,tonumber手动转
userdata
一块由c向lua申请的内存,存在lua里,申请者自行解析
function
lua中的函数是作为”第一类值“,可以随意赋给一个变量
thread
协同线程lua没有真正的多线程,他都是串行执行的,生产者消费者模式
只能自己停止自己
可以使用守护线程来在多个协同线程中通过状态判断来模拟多线程的环境
table
lua里唯一的一种数据结构
lua里的module package object都是用table实现的
table是一个对象,所有对他的
可以表示出多种数据结构
数组
可以不写key添加数据如:t={1,2,3,4}
自动定义从下标1开始顺序向后加一
所有没有显示声明key的项都是自动生成数组下标的
lua里与c不一样的地方就是一标都人1开始,一定记住
t={"a", 2="b", "c", 4=1, 2, 6=3}
t[1] = "a"
t[2] = "c"
t[3] = 2
t["2"] = "b"
t["4"] = 1
t["6"] = 3
后面三项不再是数组而是hash表
使用#可以得到数组长度,但要求所有下标是从1开始连续的
t={}
t[1] = 1
t[100] = 100
的长度是1,因为它以找到nil的值为结束,以上的定义方式数组断了
二维数组就是table套table
t={ {100,200}, {300,400}}
t[1][1] = 100
t[1][2] = 200
t[2][1] = 300
t[2][2] = 400
链表
t1 = {p=t3, v="value", n=t2}
t2 = {p=t1, v="value", n=t3}
t3 = {p=t2, v="value", n=t1}
环形链表
hash表
队列
栈
可以使用lua中的任何类型作key和value,除nil不能当key,当value是删除
只能显示的声明一个table,t = {}
添加数据
t = {"a","b","c",1,2,3}
t={1="a",2="b",3="c",4=1,4=2,6=3}
以上两人个定义不相等,显示声明时字符串类型的key可以不写双引号
t[1] = "a"
t[2] = "b"
t[3] = "c"
t[4] = 1
t[5] = 2
t[6] = 3
这个与第一个相同
t["1"] = "a"
t["2"] = "b"
t["3"] = "c"
t["4"] = 1
t["5"] = 2
t["6"] = 3
这个与第二个相同
t={x="lua"}
t={} t.x="lua" t["x"] = "lua"
使用type函数可以返回一个可以显示的字符串
最新文章
- react自学笔记总结不间断更新
- mysql安装过程中出现错误ERROR 1820 (HY000): You must SET PASSWORD before executing this statement解决
- 【转】Linux中如何安装.rpm、.tar、.tar.gz和tar.bz2
- listToString
- Visual Studio 2012 离线升级包的制作
- 【Jenkins】Linux搭建Jenkins平台
- Oracle读取和修改数据块的过程 专家
- hdu Red and Black
- 计时器chronometer补充
- cmake的四个命令:add_compile_options、add_definitions、target_compile_definitions、build_command
- java之重定向与转发
- Floyd算法java实现demo
- 9宫拼图小游戏(WPF MVVM实现)
- you can&#39;t add a reference to Newtonsoft.Json.dll as it was not built against the silverlight runtime
- NO.2 安装配置
- ASP.NET WebForm 检测页面刷新(Refresh)
- PAT A1121 Damn Single (25 分)——set遍历
- Android 代码实现应用强制装到手机内存
- java基础知识总结(二)
- 在CentOS/RHEL 6.4上安装Chromium
热门文章
- codeforces-526B
- Codeforces Round #377 (Div. 2) A. Buy a Shovel【暴力/口袋里面有无限枚 10 元和一枚 r 面值的硬币,问最少可以买多少把价值为 k 的铁铲】
- java trim start end space
- TCP/IP,http,socket,长连接,短连接 —— 小结
- USACO 4.4.2 追查坏牛奶 oj1341 网络流最小割问题
- redis的lua脚本拓展,返回nil及其判断
- [置顶]
 kubernetes资源类型--Volume
- ISP基础一
- ElasticSearch refresh API
- 机器学习第2课:单变量线性回归(Linear Regression with One Variable)