博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lua函数之一
阅读量:7119 次
发布时间:2019-06-28

本文共 2245 字,大约阅读时间需要 7 分钟。

函数声明:

function foo(arguments)  statementsend

 

1、函数调用

 

调用函数的时候,如果参数列表为空,必须使用()表明是函数调用,例如:

os.date()

 

当函数只有一个参数并且这个参数是字符串或者table构造器的时候,可以省略函数调用操作符"()",例如:

print "Hello World"dofile "a.lua"f{x=10,y=20}

 

面向对象方式调用函数的语法,例如:

obj::foo(x)   obj.foo(obj, x)

 

实参和形参结合时,多余部分被忽略,不足补充nil,例如:

function f(a,b) return a or b endf(3)          -- a=3, b=nilf(3,4)        -- a=3, b=4f(3,4,5)      -- a=3, b=4, 5 is discarded

 

 

2、多返回值

假设有3个函数:

function foo0() endfunction foo1() return 'a' endfunction foo2() return 'a', 'b' end

 

如果只想接收指定的返回值,可以使用哑元(dummy variable),例如:

_,x = foo2()print(x)    -- 'b'

 

另一种方式是使用select函数:

select(index, ...),返回所有>=index的参数;当index='#',返回参数个数

function foo3() return 'a', 'b', 'c' endprint(select(1, foo3()))    -- a b cprint(select(2, foo3()))    -- a bprint(select(3, foo3()))    -- aprint(select('#', foo3()))  -- 3

 

在表达式中调用函数时:

1、当函数调用作为表达式最后一个参数(或仅有一个参数)时,函数尽可能多地返回多个值,不足补nil,超出舍去;

2、其他情况下,函数调用仅返回第一个值(如果没有返回值为nil);

x,y=foo2()            -- x='a',y='b'x=foo2()              -- x='a', 'b' is discardedx,y,z=10,foo2()        -- x='10',y='a',z='b'x,y=foo0()             --x=nil,y=nilx,y=foo1()             -- x='a', y=nilx,y,z=foo2()           -- x='a', y='b',z=nilx,y=foo2(),20          --x='a',y=20 x,y=foo0(),20,30        -- x=nil,y=20, 30 is discardedx,y,z=foo0(),foo2()       -- x=nil,y='a',z='b'

 

函数调用在table构造器中使用时:

a = {foo0()}        -- a={}, a is emptya = {foo2()}        -- a={a,b}a = {foo0(),foo1(),foo2(),4}        -- a={nil,a,a,b,4}

 

函数调用作为函数参数被使用时:

print (foo0())      --print (foo1())      -- aprint (foo2())      -- a bprint (foo2() .. 'x')      -- ax

可以使用圆括号"()"强制使调用只返回一个值:

print ((foo0()))      -- nilprint ((foo1()))      -- aprint ((foo2()))      -- a

 

unpack 函数接受一个数组作为输入参数,并返回数组的所有元素。

a={"england",960,"china",30, 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(3)             -- a=3, b=nil, arg={n=0}g(3,4)           -- a=3, b=4, arg={n=0}g(3,4,5,8)       -- a=3, b=4, arg={5,8,n=2}

如上面所示,Lua会将前面的实参传给固定参数,后面的实参放在arg表中。

  

转载于:https://www.cnblogs.com/zhaolizhe/p/6923494.html

你可能感兴趣的文章
openstack mitaka 完整安装详细文档(亲测,花了3天时间)
查看>>
for 循环嵌套for循环
查看>>
GTID复制异常的解决步骤
查看>>
【沫沫金】安卓手机版 - 日期控件
查看>>
在Linux使用exec执行命令时报的哪些错
查看>>
Waud.js – 使用HTML5降级处理的Web音频库
查看>>
WIN10 64位 JDK的安装
查看>>
CentOS 6.2目录服务之LDAP(一)
查看>>
使用高速通道加速iOS版本审核
查看>>
比较好玩的动态添加网页元素
查看>>
可替代的C语言开发环境
查看>>
Word 2003中打开最近操作过的文档的两种推荐的方法
查看>>
一条长为L的绳子,一面靠墙,另外三边组成矩形,问此矩形最大面积能是多少?...
查看>>
保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护 2
查看>>
从源码分析常见的基于Array的数据结构动态扩容机制
查看>>
重新认识javascript的settimeout和异步
查看>>
【组合数学+动态规划】在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。...
查看>>
前几天入手一大菠萝,写个初始化教程
查看>>
CSS布局 ——从display,position, float属性谈起
查看>>
SoapUI Pro Project Solution Collection-DataSource(jdbc,excel)
查看>>