美文网首页
Lua简明基础小总结

Lua简明基础小总结

作者: smile丽语 | 来源:发表于2019-12-20 14:23 被阅读0次

0. 扫盲

0.1 Lua基础简明教程

-> 参考文档:https://www.zybuluo.com/lisaisacat/note/636399

-> Lua字符串:www.runoob.com/lua/lua-strings.html

-> Mac上Sublime Text3配置Lua环境:https://www.jianshu.com/p/3bbb2a040fed

-> Mac上Sublime Text3配置安装Lua环境:https://segmentfault.com/a/1190000017494363

-> Mac上Sublime Text3配置安装Lua环境:https://www.cnblogs.com/baaingSheep/p/5145045.html


1. Lua编程Basic

1.1 注释备注

// 相当于//

-- 单行注释

// 相当于/**/,由"--[["表示注释开始,并且一直延续到"]]"为止。在注释当中,"[["和"]]"是可以嵌套的

--[[多行注释]]

1.2 语句块

// 等同于{},可以在函数中和语句块中定义局部变量

do … end

do print("Hello world") end

1.3 赋值语句(不需要声明,可以给多个变量赋值)

// 默认是全局变量

a,b,c,d=1,2,3,4

// 交换变量数值

a,b=b,a

// 局部变量,定义时,第一次赋值时,需要用local说明

local a=1

1.4 分支 条件控制

// 相当于if(x){}

if x then … end

if x then … else … end

if x then … elseif x then … else... end

1.5 循环语句

->主要循环类型:

--1\. while (true) do ... end(等同于while(){…})

--2\. repeat … until (true)  (等同于 do {} while(!a))

--3\. for 变量i=起始值a, 最大值b,步进值c do … end (等同于与 for(int i=a,i<=b,i+=c){…},步进值默认为 1,可省略,相当于i++)

--4\. for 变量1,变量2,..,变量N in表/枚举函数 do … end

--1. while (true) do ... end 等同于while(){...}

my_table = {1,2,3}

local index = 1 -- 注意: table 中的索引从1开始

while my_table[index] do -- 只要条件返回True,就一直执行循环

    print(my_table[index])

    index = index + 1    -- Lua中没有i++ 的写法,所以只能用i=I+1

end

 -- 输出 1

 --      2

 --      3

--2.repeat … until (true) 等同于do...while

local snum = 1 --起始值

repeat

    print("snum is "..snum)

    snum = snum + 1

until snum == 4  --当snum 等于 4 时(条件是True) 跳出循环

 --输出:

 --snum is 1

 --snum is 2

 --snum is 3

->PS注意:for的循环变量总是只作用于for的局部变量,可以用break来中止一个循环。

--3.for i=a, b,c do … end (步进值c默认为1,可省略)

for i = 1, 6, 2  do --这里i=1表示起始值, 10表示最大值, 2表示步进值(等同于i+2)

   print("i = "..i)

end

--输出:

--i = 1

--i = 3

--i = 5

--4.for 变量1,变量2,..,变量N in表/枚举函数 do … end for循环练习 arr={1,2,3} for i=1,#arr do … end

arr={1,2,3}

for i = 1, #arr do -- #arr表示取表的长度,相当于OC的.count(步进值默认值为1,等同于i++)

    print("arr[i] = "..arr[I])

end

-- 输出:步进值默认为1,从arr[1]开始循环输出

--arr[i] = 1

--arr[i] = 2

--arr[i] = 3

1.6 运算

->大致类型

--1\. 数值运算(+, -, *, /,^)

--2\. 比较运算(<, >, <=, >=, ==, ~=)所有这些操作符总是返回 true 或 false。

--3\. 逻辑运算 (and, or, not)

--1. ^ 乘方

2^3 // 8

--2. ~= 不等于

对于Table,Function和Userdata类型的数据,只有 == 和 ~=可以用。相等表示两个变量引用的是同一个数据。比如:

// PS: Table类型相当于对象类型,和OC创建对象产生所属地址的形式一样。

 a={1,2}

 b=a

 print(a==b, a~=b) -- true, false -- a==b,两个变量引用同一个数据

 a={1,2}

 b={1,2}

 print(a==b, a~=b) -- false, true —-两个对象

--3. and 与(找假),只有 false 和 nil 才计算为 false

a and b: 如果a为false,则返回a;否则返回b 

5 and 6 // 6

nil and 6 // nil

false and 6 // false

--4. or 或(找真),0和空串 也是 true

a or b: 如果 a 为true,则返回a;否则返回b 

5 or 6 // 5

nil or 6 // 6

0 or 6 // 0

// 常用

x = x or v(等同于 if not x then x = v end )

// 三目(等同于 x=a?b:c)

x = a and b or c

--5. not 非

--6. 优先级

^

not(一元运算),

*/, 

+-,

..(字符串连接),

< > <= >= ~= ==,

and,

or,  

1.7 字符串拼接".."运处符

"hello," .. "world." -- 等于 “hello,world."

1.8 关键字(不能做变量)

and、or、not、break、do、end、if、else、elseif、false、for、function、in、local、nil、repeat、return、then、true、until、while


2. 变量类型及定义

2.1 变量类型的分类:

--1\. Nil 空值

--2\. Boolean 布尔值

--3\. Number 数值

--4\. String 字符串

--5\. Table 关系表类型

--6\. Function 函数类型

--7\. Userdata

--8.Thread  线程类型

2.2 判断变量类型的函数

// 判读类型:返回string

type()函数

2.3 具体的变量类型

--1. nil 空值

未定义(没有使用过)的值,都是nil。nil既是值,又是类型。

// 用法:

将一个变量清除,可直接给变量赋以nil值。

a = nil -- 请注意nil一定要小写

--2. Boolean 布尔值

true/false(只有false和nil是false,0不是false)

// 用法:通常用在进行条件判断的时候

可以直接给一个变量赋以Boolean类型的值

varboolean = true

--3. Number 数值

相当于C中的double,在Lua中,是没有整数类型的,也不需要。

print(0.4); -- 0.4

print(4e-3); -- 0.004

print(4e2); -- 400.0 =( 4X10^2)

print(4e+2); -- 400.0

--4. String 字符串

4.1 String 字符串,字符串可以包含'\0'字符的

“bzc”

‘ab’

[[ abc\c\d ]] --用"[["和"]]"将多行的字符串括起来

4.2 转义字符
\a -- 响铃(BEL)

\b --  后退

\f  --  换页

\n --  换行

\r -- 回车

\t --  制表

\v -- 垂直制表(VT) vertical tab

\\ -- “\"

\" --  双引号

\' --  单引号

\[ --  左中括号

\] --  右中括号
4.3 替换
--  string.gsub (s, pattern, repl [, n])

str = "abc";

newstring = string.**gsub**(str,"ab","cd"); -- cdc
4.4 拼接
str = "abc" **..** "de"// abcde
4.5 转换
// string转number

**tonumber**("10”)

// number转string

**tostring**(10)

// 自动转number

str =  “10”**+** 1 -- 11
4.6 查找
// 返回两个参数,开始坐标,结束坐标 string.find (s, pattern [, init [, plain]])

startIndex, endIndex = string.**find**("hello world","llo”); —- 3 5

www.runoob.com/lua/lua-strings.html

--5. Table 关系表类型

可以看做是一个数组,里面可以放任意类型(除了nil),从1开始;也可以用任意类型来做数组的索引(除了nil)。

我们在写的时候,需要注意三点:

第一,所有元素之间,总是用逗号","隔开;

第二,所有索引值都需要用"["和"]"括起来;如果是字符串,还可以去掉引号和中括号;

第三,如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编。

arr = {1,2,3,4,5,6,7}

dict = {} -- 定义一个空表

dict[0] = 5 -- 然后我们就可以象C语言一样来使用它了

dict["arr”] = arr;

dict[arr] = {0,1};

dict = {

        10, --相当于[1]=10 —-不加下标的优先排

        [100] = 44,

        Zl = -- 如果你原意,你还可以写成:["Zl"] =

        {

                age=18,--相当于["age”]=18

                sex=“nv”

        },

        20 --相当于[2]=20

}

// key是字符串的时候可以用.来访问(当表的索引是字符串的时候,我们可以简写成点的方式获取)

dict.arr=“bb”

// 获取长度(去找nil结束的#运算符)

len = #dict.arr —- 上述dict的zl为2

遍历

// 依下标遍历(ipairs)。碰到nil退出

arr = {[1]=3, [2]=5, [5]=6} —-i下标是1和2;V结果为3和5

for i,v in ipairs(arr) do

    print("i = "..i)

    print("v = "..v)

end

--输出:

--i = 1

--v = 3

--i = 2

--v = 5

// 遍历所有(pairs)

arr = {[1]=3, [5]=6}

for k,v in pairs(arr) do

        print(k,v)

end

// 遍历所有,步进值默认为1

for i=1,10 do --这里i=1表示起始值, 10表示最大值,(步进值可以没有,默认值为1,也就是其他语言里的i++)

    print(i)

end

类相关

-- 定义一个对象

ZL = {

    name = "zl";

    Age = 18,

    Gender = girl,

    show = function ( this )

        print("My name is "..this.name)

    end

}

—- 也可以放在table外面定义方法

ZL.show = function ( this, a )

        print("My name is "..this.name.."\n外界传值为"..a)

end

调用方法

// 调用方法
ZL**.**show(ZL, 666)

ZL **: **show(666)

--6. Function 函数类型

注意事项:用触动精灵开发脚本时,要把封装函数写在调用前面,因为脚本是按照从上到下的顺序执行的。

// 定义 函数也是一种类型,也就是说,所有的函数,它本身就是一个变量。

-- 定义

function sum( a,b ) --sum 是函数名字,a和b是参数名字

        return a,b  -- return 用来返回函数的运行结果

end

sum = function ( a,b )

        return a,b

end

调用:当调用结果作为参数的时候,只有一个参数,或者是最后一个参数的时候,返回多个,其他的情况返回一个

-- 调用

sum(5,6)

-- 当调用结果作为参数的时候,只有一个参数,或者是最后一个参数的时候,返回多个,其他的情况返回一个

print(sum(5,6)) -- 5,6

print(sum(5,6),1) -- 5,1

print(2,sum(5,6)) -- 2,5,6

-- 可以用()强制函数值返回一个值

print((sum(5,6))) -- 5

// unpack(a):返回返回a的所有元素做为参数

// f(unpack(a))等同于string.find(“hello”,”11")

f = string.find

a = {"hello",  "ll”}

print(f(unpack(a)))  

// 可变长参数

function sum( x,... )

      // 获取可变参数列表 

       arg = { ... }

        local s = 0

        for i,v in ipairs(arg) do

                s=s+v

        end

        return s

end

print(sum(5,6,7,8,9)) 

--7. Userdata

用于与Lua的宿主打交道.宿主通常是用C和C++来编写的,Userdata可以是宿主的任意数据类型,常用的有Struct结构体和指针.

--8. Thread 线程类型

在Lua中没有真正的线程。Lua中可以将一个函数分成几部份运行。

相关文章

  • Lua简明基础小总结

    0. 扫盲 0.1 Lua基础简明教程 -> 参考文档:https://www.zybuluo.com/lisai...

  • redisgo操作LUA脚本

    LUA脚本基础学习:LUA脚本--菜鸟教程[https://www.runoob.com/lua/lua-tuto...

  • Lua简明教程

    这几天系统地学习了一下Lua这个脚本语言,Lua脚本是一个很轻量级的脚本,也是号称性能最高的脚本,用在很多需要性能...

  • Lua中的CAPI概述

    头文件lua.h: Lua提供的基础函数,包括创建Lua环境,调用Lua函数,读写Lua环境中的全局变量,以及注册...

  • LuaC API

    Lua C APi 总结 Lua_newtable(L) 创建table并放到栈顶 lua_pushstring(...

  • Lua 学习笔记

    最近要用到 Lua 编程语言,所以学习了一些简明教程,同时记录一下 Lua 编程语言相对于其他主流编程语言在语法上...

  • 2017.5.25

    lua学习总结:数据结构: 使用Lua实现链表(单向链表和双向链表),队列 使用Lua保存图,用table保存,每...

  • Lua性能优化Tips

    前言 这是基于Lua官方文档总结(fan yi)出来的文章 -) 关于Lua的属性 Lua中每一个active的函...

  • lua基础

    Lua 5.3 参考手册 http://www.runoob.com/manual/lua53doc/manual...

  • LUA基础

    1定义: num = 100 这里定义一个全局变量叫num,赋值100 在Lua中定义变量没有类型,根据...

网友评论

      本文标题:Lua简明基础小总结

      本文链接:https://www.haomeiwen.com/subject/zanbnctx.html