Cocos2d-x学习进阶5:函数190429

一、返回多重数值

  1. 如下
--------------------------------
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。如下图

string.find
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))

二、定义函数

  1. 定义对象的方法
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 作为参数

三、可变参数

  1. 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 个点…表示该函数可以接受不同数量的实参。

四、闭包函数

  1. 闭包函数是指将一个函数写在另一个函数之内,这个位于内部的函数可以访问外部函
    数中的局部变量。
    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

发布了6 篇原创文章 · 获赞 0 · 访问量 127

猜你喜欢

转载自blog.csdn.net/LINZAI508/article/details/89655996
今日推荐