Lua学习笔记

XXX类型的语言

         |--静态类型

         |       |--说明:编译期数据类型是固定的语言,它要求你在使用变量之前声明它的数据类型。Java/C

         |--动态类型

         |       |--说明:执行期才去发现数据类型的语言。Python/VBScript

         |--强类型

         |       |--举例:如果你有一个整数,它不进行显示转换,就不能将其视为一个字符串。Java/Python/C

         |--弱类型

                   |--举例:与强类型对应,不需要进行显示转换。VBScript

        

--C++是强类型、静态类型语言。

--Lua是动态类型的语言。

 

nil

         全局变量没有被赋值前默认值为nil;被赋nil表示删除该变量;经常被作为错误返回值

        

单行注释

         --singleline comment

        

多行注释

         --[[

                   multilinecomment.

         --]]

 

8大类型

         |--nilboolean number string userdata function thread table

 

type function

         |--测试给定xxx的类型,xxx可以是类、变量或值等。

        

Boolean

         |--控制结构中,除了false和nil为假外,其它值都为真。所以Lua认为0和空串都为真

        

String

         |--Lua中字符串是只读的。

         |--另外,[[...]]可以表示字符串,并且不会解释转义序列。

         |--运行时,Lua会自动在string和number之间进行类型转换。

         |       |--print("10"+1) --> 11 --自动将字符串"10"转换为number 10,然后与1相加

         |       |--print(10 .. 20) -->1020 --“..”是字符串连接符

         |--string和number间的转换:

                   |--tonumber("10")

                   |--tostring(10)

                  

New concepts

         |--第一类值

         |--词法定界:被嵌套的函数可以访问它外部函数中的变量(类似

         |       于Java中的内部类)

         |--闭包:在有嵌套函数的情形下,当内部函数被外部函数作为返回值返回时,

                   内部函数对象的生命期超出了外部函数对象的生命期。

                   但是根据词法定界,内部函数能够使用外部函数的局部变量,

                   这与内部函数对象生命期长于外部函数对象生命期相矛盾。

                   为解决这个问题,闭包应运而生,它为内部函数对象所需要用到的外部函数

                   的局部变量做了备份。

                   |--外部函数的作用是创建内部函数,可以看成一个function factory

                   |--闭包指的是内部函数

 

Function

         |--函数是第一类值(first-classvalue),意味着可以像使用变量一样得使用函数。

         |--词法定界(lexicalscoping)

         |--闭包

         |--尾调用(不需要额外的栈来保存调用者的信息)

         |--函数可以是匿名的:foo= function(x) return 2 * x end

         |       |--理解:函数名,实际上,是指向一个函数的变量

         |

         |--函数调用

         |       |--如果参数列表为空,必须用()表明是函数调用以免与变量混淆

         |       |--如果只有一个参数并且这个参数是字符串或者“表的构造”,则()是可选的

         |       |       |--print("hellolua world!")

         |       |--形参实参的匹配:多余部分忽略,缺少部分用nil补足

         |

         |--可变参数:

         |       |--参数列表中用...表示

         |       |--Lua将可变参数放在一个arg表中,arg中还有一个表示参数数目的域n

         |

         |--参数命名:Lua的函数参数是和位置相关的

         |       |--技巧:将所有参数放在一个表中,并把表作为函数的唯一参数

         |

         |

        

unpack function

         |--接受一个数组作为输入参数,返回数组中的所有元素

                   |--sample:

                            days= {"Sunday", "Monday", "Tuesday",

                                               "Wednesday","Thursday", "Friday", "Saturday"}

                            print(days)--返回days的内存地址

                            print(unpack(days))--返回各个元素

 

        

 

and,or,not

         |--and,or的返回值不是boolean类型的true和false,而是与两个操作数相关

                   |--a and b --判断第一个操作数,如果a为false,则返回a,否则返回b

                   |--a or b --判断第一个操作数,如果a为true,则返回a,否则返回b

                   |--x = x or v

                   |--

 

Assignment

         |--Lua会先计算所有右边的值,然后再执行赋值操作

                   |--x,y = y, x --swap 'x' for 'y'

                  

局部变量

         |--应该尽量使用局部变量

         |       |--避免命名冲突

         |       |--访问局部变量的速度比访问全局变量更快

         |--代码块,do ...end

        

 

Iterator

         |--迭代工厂(创建闭包的工厂)

         |--迭代函数(闭包)

         |--范性for

         |       |--for <var-list> in<exp-list> do

         |                          <body>

         |         end

         |       |--在自己内部保持迭代函数,实际上,主要保持了:迭代函数、状态常量和控制变量

         |       |--for循环一开始就初始化<exp-list>以获得迭代函数、状态常量和控制变量

         |       |--<var-list>的第一个变量为控制变量,其值为nil时循环结束

         |

         |--无状态的迭代器(避免自己创建闭包)

         |       |--ipairs:遍历数组中的每一个元素

         |

        

        

编译、运行、调试

         |--Lua会首先把代码预编译成中间码然后再执行

         |--require\dofile\loadfile\loadstring\loadlib

         |--chunk

         |--错误

                   |--error\

        

 

 

 

 

 

 

 

 

        

 

        

        

        

        

        

        

        

        

 

 

        

        

        

        

         


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值