学习记录
*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学习笔记
发布评论