lua 可变参数

转载 2015年11月19日 14:18:56

Lua函数可以接受可变数目的参数,和C语言类似在函数参数列表中使用三点(...)表示函数有可变的参数。Lua将函数的参数放在一个叫arg的表中,除了参数以外,arg表中还有一个域n表示参数的个数。

例如,我们可以重写print函数:

printResult = ""

 

function print(...)

    for i,v in ipairs(arg) do

       printResult = printResult .. tostring(v) .. "\t"

    end

    printResult = printResult .. "\n"

end

有时候我们可能需要几个固定参数加上可变参数

function g (a, b, ...) end

 

CALL              PARAMETERS

 

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表中。

举个具体的例子,如果我们只想要string.find返回的第二个值。一个典型的方法是使用哑元(dummy variable,下划线):

local _, x = string.find(s, p)

-- now use `x'

...

还可以利用可变参数声明一个select函数:

function select (n, ...)

    return arg[n]

end

 

print(string.find("hello hello"" hel")) --> 6  9

print(select(1, string.find("hello hello"" hel"))) --> 6

print(select(2, string.find("hello hello"" hel"))) --> 9

有时候需要将函数的可变参数传递给另外的函数调用,可以使用前面我们说过的unpack(arg)返回arg表所有的可变参数,Lua提供了一个文本格式化的函数string.format(类似C语言的sprintf函数):

function fwrite(fmt, ...)

    return io.write(string.format(fmt, unpack(arg)))

end

这个例子将文本格式化操作和写操作组合为一个函数。

原文链接:http://book.luaer.cn/_38.htm


Lua5.2新版本可变长参数操作

在Version5.2 Lua的版本中,取消了默认的arg表操作函数( ... )可变长参数的操作 以前的: local function test( ... ) num = arg.n return...

Lua语法小贴士(十三)可变参数与unpack

Lua支持可变参数,用...表示。 另外Lua里面可以使用unpack函数将数组形式的table拆开。...

神奇的Lua:可变参数

变参被依次放在arg表中。可以通过...继续传递变参。

【Lua】四大循环语句&可变参数方法简例

最近闲暇着学Lua,有语言基础的前提下学新语言真心觉得轻松加愉快,发现Lua和JS竟然挺相似的,不仅是语法结构还是各种用法,把方法赋值给变量这些都是相通的,挺好的,只是希望后面别弄混淆了就尴尬了[笑]...

lua--函数.变长参数 and 具名实参

variable number of arguments :变长参数,指函数可以拥有不同数量的实参。 当函数需要一个或者多个参数时,可以使用...代替这些参数。此时...为表达式,表达式...的行为类...
  • yyhero1
  • yyhero1
  • 2015年06月11日 20:14
  • 1614

类型安全的 C++/Lua 任意参数互调用

转自: http://gulu-dev.com/post/2016-05-19-cpp-lua-vargs 在 C++ 和 Lua 协作时,双方的互调用是一个绕不开的话题。通常情况下...

利用luabind从C++中传递指针到lua中,lua操作指针对象

(前提条件: 1.配置好lua环境 2.配置好boost库 3.编译好luabind 项目忙写的比较简单,详细使用可以QQ联系我545550598.主要功能是C++中传递一个指针到lua中,使...
  • dugaoda
  • dugaoda
  • 2015年12月16日 11:26
  • 1727

Lua function函数,可变参数, 局部函数,尾递归优化

在Lua中,函数是作为"第一类值"(First-Class Value),这表示函数可以存储在变量中,可以通过参数传递给其他函数,或者作为函数的返回值(类比C/C++中的函数指针),这种特性使Lua具...

C语言可变参数

  • 2014年03月12日 09:27
  • 21KB
  • 下载

Swift视频教程:函数篇 可变参数

  • 2015年08月26日 16:34
  • 38.77MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:lua 可变参数
举报原因:
原因补充:

(最多只允许输入30个字)