Lua 笔记(第一天)
来源:互联网 发布:淘宝充值中心 编辑:程序博客网 时间:2024/05/16 04:08
- Lua中的数据类型
- string
- table
- table遍历
- function
- thread
小白新学,所有资料源于互联网 此处,仅为记录
Lua中的数据类型
Lua 是动态类型语言 类似JS不需类型的定义,只需要直接赋值。
Lua 中有7种基本数据类型:nil,boolean,number,string,usedata,function,thread,table。
userdata thread table 和Java不同的地方
function nil 方法也是基本类型。。。。
type 函数测试
print(type("Hello world")) --> stringprint(type(10.4*3)) --> numberprint(type(print)) --> functionprint(type(type)) --> functionprint(type(true)) --> booleanprint(type(nil)) --> nilprint(type(type(X))) --> string
string
可以用[[]]包含 表示一块字符串
html = [[<html><head></head><body> <a href="http://www.w3cschool.cc/">w3cschool菜鸟教程</a></body></html>]]print(html)
输出
<html><head></head><body> <a href="http://www.w3cschool.cc/">w3cschool菜鸟教程</a></body></html>
当对数字字符串进行计算时,Lua会将其先转换为number
print("6"+1)结果:7
字符串的连接是使用 ..
print("a".."b")结果:ab
使用 # 来计算字符串的长度,放在字符串前面
> len = "www.w3cschool.cc"> print(#len)16> print(#"www.w3cschool.cc")16>
了解一下有块的概念
table
在 Lua 里,table 的创建是通过”构造表达式”来完成,最简单构造表达式是{},用来创建一个空表。也可以在表里添加一些数据,直接初始化表
-- 创建一个空的 tablelocal tbtest = {}print(tbl1)结果: nil-- 直接初始表local tbtest = { [1] = 1, [2] = 2, [3] = 3, [4] = 4, } for k,v in ipairs(tbtest) do print(v) end 结果:1 2 3 4--如果是用 for key, value in ...的 需要使用 输出 print(valuse) 亲测之后 后面的值"value"可以用任意字符代替 只要后面输出语句 也是对应的 即可 eg: for k,a in ipairs(table) do print(a) end
Lua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字或者是字符串。
a = {}a["key"] = "value"key = 10a[key] = 22a[key] = a[key] + 11for k, v in pairs(a) do print(k .. " : " .. v)end结果 : key:value 10 :33
table 是一个键值对应的数据结构,且难以获得其大小(排序解释),其次是 直接 用table={"1","b"}
不指定key的话 相当于数组功能,但是可以存放不同的值进去,默认角标从 1 开始
table遍历
- for key, value in pairs(tbtest)
- for key, value in ipairs(tbtest)
- for i=1, #(tbtest)
- for i=1, table.maxn(tbtest)
此处tbtest 定义如下
tbtest = {1,2,3,4}
for key,value in pairs(tbtest) do print(tbtest[key] end for key,value in ipairs(tbtest) do print(tbtest[key] end 前者遍历 按照hash值 会遍历所有的元素 后者按照table 的key 从1开始到key不连续即止for i=1, #(tbtest) 这种方式无法遍历所有的元素,因为'#'只会获取tbtest中从key为1开始的key连续的那几个元素,如果没有key为1,那么这个循环将无法进入。for i=1, table.maxn(tbtest) do--这种方式同样无法遍历所有的元素,因为table.maxn只会获取key为整数中最大的那个数,遍历的元素其实是查找tbtest[1]~tbtest[整数key中最大值],所以,对于string做key的元素不会去查找,而且这么查找的效率低下,因为如果你整数key中定义的最大的key是10000,然而10000以下的key没有几个,那么这么遍历会浪费很多时间,因为会从1开始直到10000每一个元素都会查找一遍,实际上大多数元素都是不存在的,
总结
for key, value in pairs(tbtest)
根据hash 值来进行排序 并不是按照table的key 值,但是会便利所有的table
for key, value in ipairs(tbtest)
按照key的顺序来遍历,也是从1开始
for i=1, #(tbtest)
从1 开始 找不到1 就输出0,key值不连续,也不继续执行
for i=1, table.maxn(tbtest)
效率低。
通常使用的迭代器function pairsByKeys(t) local a = {} for n in pairs(t) do a[#a+1] = n end table.sort(a) local i = 0 return function() i = i + 1 return a[i], t[a[i]] end end 遍历使用for key, value in pairsByKeys(tbtest) do if nSeq <= key then return key end end
function
在 Lua 中,函数是被看作是”第一类值(First-Class Value)”,函数可以存在变量里:
function factorial1(n) if n == 0 then return 1 else return n * factorial1(n - 1) endendprint(factorial1(5))factorial2 = factorial1print(factorial2(5))结果:120120
thread
在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。
线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
- Lua 笔记(第一天)
- 概论笔记(第一天)
- JavaScript(第一天笔记)
- quick lua学习第一天
- JSP学习笔记(第一天)
- 安卓开发第一天(笔记)
- 黑马程序员---学习笔记(第一天)
- Spring学习笔记(第一天)
- 待飞笔记(第一天 )
- JVM学习笔记(第一天)
- Redis学习笔记(第一天)
- OpenGL学习笔记(第一天)
- python 笔记学习(第一天)
- (笔记)学习Linux第一天
- hibernate学习笔记第一天(1)
- hibernate学习笔记第一天(2)
- hibernate学习笔记第一天(3)
- hibernate学习笔记第一天(4)
- Android优化篇——网络连接
- nagios插件之监控linux下分区是否被挂载
- 17. Letter Combinations of a Phone Number(第三周)
- string库之模拟实现memcpy与memmove
- Oracle 中解析Json数据 PLJson的安装及使用
- Lua 笔记(第一天)
- 【J2EE】连接Mysql数据
- FFMPEG结构体分析:AVCodec
- 【C++】:C++泛型基础
- 【Leetcode】142. Linked List Cycle II
- git
- No ViewHolder!!! 一个非官方的纯java版 databinding(拒绝xml配置).
- Unity3D说明文档翻译-Scene View Navigation
- string库之模拟实现strlen与memset