学习记录

*Lua

中函数调用

,

可省略括号的情况

:

一个函数只有一个参数

,

并且次参数是一个字面字符或

table

构造式。

*Lua

中面向对象特殊调用提供一种特殊的语法

冒号操作符。

*Lua

中逻辑操作符,

and

or

返回的不是逻辑真假,而是返回的操作数。

*Lua

中函数调用多重返回值,

返回情况约定:

只有当一个函数调用是一系列表达式

(

4

种情

况:多重复值,函数调用时的传入参数,

table

的构造式和

return

语句)中的

最后一个元素

(或仅有一个元素)时,才能取得他的所有返回值。其他情况返回数量至多为

1

*Lua

中多重复值对操作符()的约定,单独被()包围的多重复值,会被强迫只返回一个

值。

*Lua

中多重返回值得特殊函数

-unpack

,一次返回数组参数的所有元素,此函数的主要用途

体现在“范型调用”机制中。

*Lua

中变长参数,操作符

表示变长实参,

{

}

表示一个有所有变长参数构成的数组。

*Lua

中提供格式化文本(

string.format

)和输出文本(

io.write

)的函数

*Lua

中遍历变长参数的函数

select(selector,

) ,

selector

为数字

n

时返回

,

返回边长数组中

n

各值

,

selector

"#"

,

返回变长数组长度。

*Lua

中函数构造式,

function (

参数

)

语句体

end

*Lua

closure

(

闭合函数)

相关概念:

词法域,

第一类的”

函数,

非局部的变量”

(

upvalue

)

函数体

赋予

变量

时,

变量

会完成一个

函数构造式

创建和初始化函数中的各种变量,

成为

函数变量

函数变量

在被释放前都维护着自己的

资源块

函数变量的资源块中可存在函数变

量。

Lua

语言中函数变量中的局部代码可调用函数变量同一词法域的变量,对其理解可参考

c++11

lambda

可以设定识别范围。

*Lua

中由于函数变量的机制,其递归是通过函数变量实现的,而不是函数名(

Lua

中函数块

均无名)

*Lua

中一种定义函数的语法糖:

语法糖定义初始化函数变量

local function foo (<

参数

>) <

函数体

> end

实际展开:

local foo ;foo = function (<

参数

>) <

函数体

> end

语法糖定义初始化函数变量

local foo;function foo (<

参数

>) <

函数体

> end

实际展开:

local foo; foo ;foo = function (<

参数

>) <

函数体

> end

*Lua

中尾调用正确的使用方法:判断准则“一个函数在调用完另一个函数之后,是否就无

其它事情需要做”

function

f

(x)

g(x)

end

就不是尾调用,调用完

g

f

并不能立即返

回,它需要判断并丢弃

g

返回的临时结果,见附录《尾调用》

*Lua

中模式匹配见附录《

Lua

模式匹配》

*Lua

next(t,k),k

table

t

的一个

key

此调用会返回

table

k

的下一个

key

及这个

key

所对应的值。而调用

next

(

t

nil

)时,返回

table

的第一组值。若没有下一组值时,返回

nil

Lua

中数字型

for

第三个参数的正负决定结束的判断方式。

*Lua

中范型

for  in  do

end

此表达式首先对

表达式进行求值,返回到三个值:迭代器,恒定状态,和控制

变量。即范型表达式变为

for  in

迭代器,恒定状态,控制变量

do

end

例如:

function

( t )

return

next ,t ,nil

for

k, v

in

next,t

do

--

范型

for in

自动补充为

next

t

nil

更多推荐

lua菜鸟教程_(完整版)lua学习笔记