加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua学习笔记

发布时间:2020-12-14 22:21:09 所属栏目:大数据 来源:网络整理
导读:XXX类型的语言 ???????? |--静态类型 ???????? |?????? |--说明:编译期数据类型是固定的语言,它要求你在使用变量之前声明它的数据类型。Java/C ???????? |--动态类型 ???????? |?????? |--说明:执行期才去发现数据类型的语言。Python/VBScript ???????? |

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会首先把代码预编译成中间码然后再执行

???????? |--requiredofileloadfileloadstringloadlib

???????? |--chunk

???????? |--错误

?????????????????? |--error

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读