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 方法也是基本类型。。。。

数据类型 描述 nil 只用nil 属于这个类,代表无效值,调用未赋值的变量时,返回nil,表达式中表示false boolean true和false string 字符串 一对单引号或双引号 ‘string’ “string” number 标识双精度类型的实浮点数 function 由C或Lua 编写的函数 userdata 表示任意存储在变量中的C数据结构 thead 独立线路,用于执行协同程序 table Lua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过”构造表达式”来完成,最简单构造表达式是{},用来创建一个空表。

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值 会遍历所有的元素 后者按照tablekey1开始到key不连续即止for i=1, #(tbtest) 这种方式无法遍历所有的元素,因为'#'只会获取tbtest中从key1开始的key连续的那几个元素,如果没有key1,那么这个循环将无法进入。for i=1, table.maxn(tbtest) do--这种方式同样无法遍历所有的元素,因为table.maxn只会获取key为整数中最大的那个数,遍历的元素其实是查找tbtest[1]~tbtest[整数key中最大值],所以,对于string做key的元素不会去查找,而且这么查找的效率低下,因为如果你整数key中定义的最大的key10000,然而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)时才会暂停。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 四个月孩子拉稀怎么办 6岁儿童拉肚子怎么办 猫咪拉屎特别臭怎么办 新生儿呕奶打嗝怎么办 猫拉屎特别臭怎么办 小孩积食不拉屎怎么办 8岁儿童连拉带吐怎么办 新生儿突然喷奶怎么办? 一岁宝突然吐奶怎么办 宝宝喉咙吼吼的怎么办 奶水像清水一样怎么办 新生婴儿受凉了怎么办 小狗拉稀带血怎么办 新生儿老是喷奶怎么办 初生婴儿受凉了怎么办 婴幼儿受凉吐奶怎么办 宝宝肚子积食了怎么办 宝宝着凉发烧拉肚子怎么办 1岁拉稀水怎么办 新生儿婴儿呕奶怎么办 儿童肚子着凉拉肚子怎么办 七个月宝宝拉肚子怎么办 小孩大便果冻状怎么办 五个月婴儿拉稀怎么办 孩子老是着凉怎么办呢 五个月孩子拉肚子怎么办 肚子着凉了拉稀怎么办 小孩子着凉吐奶怎么办 儿童大便有粘液怎么办 宝宝拉鼻涕屎怎么办 婴儿拉白色粘液怎么办 宝宝不肯吃鱼肝油怎么办 婴儿不肯吃鱼肝油怎么办 宝宝吃鱼肝油吐怎么办 五个月婴儿夏天怎么办 厌奶期宝宝瘦了怎么办 二个月的宝宝不喝夜奶怎么办 婴儿不喝奶粉怎么办 小孩整天不吃饭怎么办 婴儿不吃不喝怎么办 断奶后不吃奶瓶怎么办