发布于 2016-01-23 09:28:03 | 144 次阅读 | 评论: 0 | 来源: 网友投递
Lua 脚本语言
Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的GIT项目,提供在特定平台上的即时编译功能。
没想到距离上一篇基础补充已经过了1年多了,最近准备捡回Lua,把基础都补补,今天来聊聊Lua的函数吧~
0.环境
我突然对Lua又大感兴趣的最主要原因是,Cocos Code IDE开始浮出水面了,它是Cocos2d-x官方出的一款专门针对Cocos2d-x+Lua或JS的IDE,试着用了,虽然不能说很完美,但,很值得期待。
所以,本文使用的Lua编辑器就选它了,大家就随意吧~
1.扫盲——Lua的函数
Lua要创建和调用函数都十分简单,如代码:
function mutou()
print("这绝对不是广告:www.phperz.com");
end
mutou();
2.扫盲——函数的参数
刚刚的mutou函数,我们修改一下参数,如代码:
function mutou(name, age)
print(name);
print(age);
end
我们给mutou添加两个参数,一个是name,代表名字,一个是age,代表年龄。
顺便一提,Lua是没有变量类型这一说法的,变量会根据赋予的值而展现出不一样的类型。
我们试试这样调用mutou函数:
mutou("木头", 25);
[LUA-print] 木头
[LUA-print] 25
3.海量的心——函数参数个数自适应
Lua的函数心胸比较宽广,对于我们传递进去的参数,全部都会忍受,但,它会按照它的规则进行筛选。
继续刚刚那个mutou函数,我们试试这样调用:
mutou("木头");
[LUA-print] 木头
[LUA-print] nil
mutou("木头", 25, "旁白", 45);
[LUA-print] 木头
[LUA-print] 25
结果自然是,多出参数会被舍去。
至于这是好事还是坏事,就看是谁使用了~
4.多重返回值
没错,Lua似乎把我们想要的能偷懒的所有事情都给想到了,并且给实现了。
Lua的函数支持返回多个值,继续修改mutou函数,如下:
function mutou(name, age)
return name, age;
end
local name = mutou("木头", 25);
print(name);
[LUA-print] 木头
local name, age = mutou("木头", 25);
print(name .. ":" .. age);
[LUA-print] 木头:25
local name, age, hehe = mutou("木头", 25);
print(name .. ":" .. age);
print(hehe);
[LUA-print] 木头:25
[LUA-print] nil
对于多出的变量,会赋予nil值,虽然这不会造成编译错误,但是也可能会造成运行时错误。
比如,用“..”符号去连接nil值,就会报错。
5.多重返回值的特点1——必须是表达式的最后一个元素
对于有多个返回值的函数,不一定所有情况下都能返回多个值。
先来看这样一种特别的情况,仍然是刚刚的mutou函数,我们这样调用:
local a, b, c = "first", mutou("木", 25);
print(a);
print(b);
print(c);
[LUA-print] first
[LUA-print] 木
[LUA-print] 25
local a, b, c = mutou("木", 25), "first";
print(a);
print(b);
print(c);
[LUA-print] 木
[LUA-print] first
[LUA-print] nil
6.多重返回值的特点2——强制返回一个值
某些情况下,我们可能会对于一个函数感到厌烦,没错,为什么你总是返回多个值?!(小若:还不是你自己写的函数吗!)
如果想让某个函数强制只返回一个值,可以这么做:
local a, b = (mutou("木", 25));
print(a);
print(b);
[LUA-print] 木
[LUA-print] nil
7.名字参数/具名实参/named arguments
最后,我们来看看比较实用的一种函数参数——名字参数。
其实“名字参数”是我自己的叫法,《Lua程序设计》第二版中是称之为“具名实参”,但我看到英文单词以及用法之后,我还是比较倾向于称之为“名字参数”。
先来问大家一个问题,我们刚刚一直在讨论的mutou函数,有多少个参数,不要回去看,1秒钟内回答~(小若:2个!)
第二个问题,mutou函数的age和name参数哪个在前哪个在后?0.001秒内回答!(小若:回答你个头啊!)
没错,我们有时候并不记得一个函数的参数顺序,倒底age是第一个参数呢,还是name是第二个参数?(小若:好像哪里不对…)
于是,具名实参就派上用场了。
我们修改一下mutou函数:
function mutou(args)
return args.name, args.age;
end
local args = {name = "木", age = 25};
print(mutou(args));
8.结束
好了,关于函数的基础特性,就这么多了,当然,还有一个变长参数我没有提到,因为这好像没什么好提的~
最近我在计划坚持一件事情,那就是:晚上不写游戏,哪怕遇到让人兴奋的Bug。
我想把晚上的时间都拿来充电,我的基本功实在是不够用了,有点摇摇欲坠的感觉。
近期是计划把《Lua程序设计》这本书过一遍,希望能坚持~
计划是每晚花一小时看书,花一小时整理教程。
今天是第一天,很累,写教程比写游戏累多了。
有句什么话来着,永远不要让自己处于舒适的范围里,好吧,坚持…
(小若:用个毛线的省略号啊!用感叹号啊!这样才代表你有决心…)
我说,小若,那为什么你最后也用了省略号…