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会首先把代码预编译成中间码然后再执行 ???????? |--requiredofileloadfileloadstringloadlib ???????? |--chunk ???????? |--错误 ?????????????????? |--error (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |