一、返回多重数值
- 如下
--------------------------------
function f(a,b)
return a or b ;
end
f(3);-- 返回3,而b=nil;
f(3,4);--返回3,4;
returnf ()语句会把 f ()返回的所有返回值都返回,而 return (f())会迫使它只能返回一个结果。
--------------------------------
print(string.find("字符串","目标字符串"));--寻找目标字符串在字符串中的起始位置排位
eg:
print(string.find("hello lua users","lua"));--返回的是7和9。如下图
2. 函数 unpack ();
unpack();会接收一个数组作为参数,并从下标1开始返回该数组元素。
print unpack 10 20 30 – 102030
a b=unpack 10 20 30 – a=10 b=20 30 被丢弃
unpack 经常用于函数参数传递。
a= {“hello”,“ll”}
string.find (unpack (a))
二、定义函数
- 定义对象的方法
class={} -- 一个对象
function class.func1()
end
function class:func2()
end
在 Lua 中使用“:”定义的函数会自动传入一个名为 self 的变量,self 同 C++ 中的 this 一样,表示当前对象的指针;而“ .”定义的函数没有 self 。
func1 ()和 func2 ()可以用如下方式等价起来:
function class : func2 end
function class . func1 self end – 传入一个 self 作为参数
三、可变参数
- function add(…)
local s=0
fori i,v in ipairs{…} do
s= s+ v
end
return s
end
print( add( 1 2 3 4 5 ) ) – 15
参数表中的 3 个点…表示该函数可以接受不同数量的实参。
四、闭包函数
- 闭包函数是指将一个函数写在另一个函数之内,这个位于内部的函数可以访问外部函
数中的局部变量。
function newCounter()
local i=0
return function()
i= i+1
return i
end
end
c1= new Counter()
print( c1() )-- 1
print( c1() )-- 2
在这段代码中,匿名函数访问了一个非局部的变量 i ,i 用来保持一个计数器。表面上
看,由于创建变量 i 的函数( newCounter )已经返回,所以之后每次调用匿名函数时,
i 均已超出了它的作用域;但是因为匿名函数一直在使用变量 i ,所以 Lua 会正确地维护 i 的生命周期。
在匿名函数内部,i 既不是全局变量,也不是局部变量,它被称为外部的局部变量或upvalue。
以上的总结引用处是均出自Cocos2d-x 之 Lua 核心编程/刘克男著 .— 2 版 . —北京:清华大学出版社,2017