Lua函数之一
LUA函数之一
函数声明:
function foo(arguments) statements end
1、函数调用
调用函数的时候,如果参数列表为空,必须使用()表明是函数调用,例如:
os.date()
当函数只有一个参数并且这个参数是字符串或者table构造器的时候,可以省略函数调用操作符"()",例如:
print "Hello World" dofile "a.lua" f{x=,y=}
面向对象方式调用函数的语法,例如:
obj::foo(x)
obj.foo(obj, x)
实参和形参结合时,多余部分被忽略,不足补充nil,例如:
function f(a,b) return a or b end f() -- a=3, b=nil
f(,) -- a=3, b=4
f(,,) -- a=3, b=4, 5 is discarded
2、多返回值
假设有3个函数:
function foo0() end
function foo1() return 'a' end
function foo2() return 'a', 'b' end
如果只想接收指定的返回值,可以使用哑元(dummy variable),例如:
_,x = foo2()
print(x) -- 'b'
另一种方式是使用select函数:
select(index, ...),返回所有>=index的参数;当index='#',返回参数个数
function foo3() return 'a', 'b', 'c' end
print(select(, foo3())) -- a b c
print(select(, foo3())) -- a b
print(select(, foo3())) -- a
print(select('#', foo3())) --
在表达式中调用函数时:
1、当函数调用作为表达式最后一个参数(或仅有一个参数)时,函数尽可能多地返回多个值,不足补nil,超出舍去;
2、其他情况下,函数调用仅返回第一个值(如果没有返回值为nil);
x,y=foo2() -- x='a',y='b'
x=foo2() -- x='a', 'b' is discarded
x,y,z=,foo2() -- x='10',y='a',z='b'
x,y=foo0() --x=nil,y=nil
x,y=foo1() -- x='a', y=nil
x,y,z=foo2() -- x='a', y='b',z=nil x,y=foo2(), --x='a',y=20
x,y=foo0(),, -- x=nil,y=20, 30 is discarded
x,y,z=foo0(),foo2() -- x=nil,y='a',z='b'
函数调用在table构造器中使用时:
a = {foo0()} -- a={}, a is empty
a = {foo2()} -- a={a,b}
a = {foo0(),foo1(),foo2(),} -- a={nil,a,a,b,4}
函数调用作为函数参数被使用时:
print (foo0()) --
print (foo1()) -- a
print (foo2()) -- a b
print (foo2() .. 'x') -- ax
可以使用圆括号"()"强制使调用只返回一个值:
print ((foo0())) -- nil
print ((foo1())) -- a
print ((foo2())) -- a
unpack 函数接受一个数组作为输入参数,并返回数组的所有元素。
a={"england",,"china",, x="america"}
print(unpack(a)) -- england 960 china 30
上面的print函数可以打印可变参数。
2、可变参数
在Lua中,使用 ... 表示可变参数,在函数中可变参数会存放在arg的一个table中,它有一个域n表示参数个数。
function g(a,b,...)
result = ""
for i,v in ipairs(arg) do
result = result .. tostring(v) .. '\t'
end
result = result .. '\n'
end g() -- a=3, b=nil, arg={n=0}
g(,) -- a=3, b=4, arg={n=0}
g(,,,) -- a=3, b=4, arg={5,8,n=2}
如上面所示,Lua会将前面的实参传给固定参数,后面的实参放在arg表中。
Lua函数之一的更多相关文章
- C中调用Lua函数
我们先来看一个简单的例子: lua_State* L = NULL; // 内部调用lua函数 double f(double x, double y) { double z; lua_getglob ...
- Lua函数之二
Lua函数之二 Lua中函数的两个重要特性: 1.函数和其他类型(如number.string)一样,可以存放在变量中,也可以存放在table中,可以作为函数的参数,还可以作为函数的返回值. 2.嵌套 ...
- 一些LUA函数(转载)
转自http://hi.baidu.com/chevallet/item/9a3a6410c20d929198ce3363 一些LUA函数 1.assert (v [, message]) 功能:相当 ...
- C语言调用Lua函数
记得上学时,初中英文课本中,上网叫做surfing the internet,中文叫网上冲浪. 那个时期,人们常常称互联网为赛博空间.现在工作了,大量的零碎时间用于上微博,知乎,QQ.这些碎片化的阅读 ...
- C模块回调Lua函数的两种方法
作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di C模块回调Lua函数的两种方法 lua和C通过虚拟栈这种交互方式简单而又可靠,缺点就是C做栈平 ...
- Lua函数以及闭合函数的理解
Lua函数以及闭合函数的理解 来源 http://blog.csdn.net/mydad353193052/article/details/48731467 词法域和第一类型 在C/C++,C#或者J ...
- lua函数随记
在大多数Lua语法分析中可以获得这些标准Lua函数. 无可争辩, 我们可以查阅Lua网站, 但是一些少了的函数被Blizzard进行了调整. 下面列出了所有Lua函数. WoW API中的Lua注意在 ...
- Lua 函数参数 & 默认实参
[1]Lua函数,默认实参 习惯了其他语言(如C++)的默认实参,利用Lua语言的过程中,发现没有默认实参这种机制. 所以,自己模拟了一个满足业务需求的带默认实参的函数. (1)示例如下: local ...
- Lua函数[转]
在大多数Lua语法分析中可以获得这些标准Lua函数. 无可争辩, 我们可以查阅Lua网站, 但是一些少了的函数被Blizzard进行了调整. 下面列出了所有Lua函数. WoW API中的Lua注意在 ...
随机推荐
- C语言 位运算
1G=1024M; 1M=102KB; 1KB=1024B(字节); 1B=8bits(位); #include<stdio.h> #include<stdlib.h> //C ...
- Android -- 使用inBitmap要注意的地方
SDK版本 需要注意的是inBitmap只能在3.0以后使用.2.3上,bitmap的数据是存储在native的内存区域,并不是在Dalvik的内存堆上. 在android3.0开始,系统在Bitma ...
- 【逆向怎么玩】 动态调试一款牛逼C++ IDE实录
声明 本篇只从逆向兴趣出发,研究其程序运行原理. CLion程序版权为jetBrains所有. 注册码授权为jetBrains及其付费用户所有. 不会释出任何完整的源代码. 涉及能直接推算出注册码的地 ...
- 怎样开发单页面app
groot.view("myview", function (vm, ve) { ve.loada = function () { require("./app/page ...
- 从零开始写redis客户端(deerlet-redis-client)之路——第一个纠结很久的问题,restore引发的血案
引言 正如之前的一篇博文,LZ最近正在从零开始写一个redis的客户端,主要目的是为了更加深入的了解redis,当然了,LZ也希望deerlet客户端有一天能有一席之地.在写的过程当中,LZ遇到了一个 ...
- IDL简介与corba入门案例
IDL接口定义语言简介 IDL用中立语言的方式进行描述,能使软件组建(不同语言编写的)间相互通信. IDL提供了一个桥来连接不同的系统. Corba 上的服务用IDL描述,将被映射为某种程序设计语 ...
- 支持Json进行操作的Javascript类库TAFFY DB
前段时间工作中用到Json数据,希望将一些简单的增删改查放到客户端来做,这样也能减少服务器端的压力.分别查找了几个可以对Json进行操作的javascript 类库,最终选定了TAFFY DB.原因如 ...
- [设计模式] javascript 之 工厂方法模式
1. 简单工厂模式 说明:就是创建一个工厂类,里面实现了所对同一个接口的实现类的创建. 但是好像JavaScript 好像没有 接口 这号东西,所以我们去掉接口这个层; 当然,我们这里的 实现类 下的 ...
- [转载]NSString中判断中文,英文,数字
曾有需求做个用户名中非法字符的判断,要求是只能输入中英文和数字,其他字符一律非法,故写了下边一个程序mark一下吧~~ NSString *testString = @"春1mianBU觉晓 ...
- 团队项目--关于QQ项目的运行和总结
目前为止该QQ项目实现如下功能:添加好友到好友列表,可以把好友在不同分类中移动,同时支持离线查找添加好友,离线更换头像,离线发送消息,保存所有好友聊天记录,发送窗口抖动,查看对方信息,更改/添加信息等 ...