打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
2ndboy@释放 3.0 ? Blog Archive ? Lua 函数的缺省参数和可变参数列表

Lua 函数的缺省参数和可变参数列表

  Lua 里面的函数有个“奇怪的”特性——调用时参数个数可以传任意多个。比方说有个函数的定义是 function Foo( a, b ),那么你调用的时候可以写 Foo( “2ndboy”, “test” ),也可以写 Foo( 123 ),还可以写 Foo( 123, 987, “2ndboy” ),都不算错。如果实参个数少于形参个数,那么其余参数的值就是 nil;反之如果多于形参个数,那么多出来的值就被抛弃了。

  想到利用这个特性可以模拟一下缺省参数,Lua 是没有内建对缺省参数的支持的(比如 C++ 里面的 int Foo( int a, int b = 999 ))。如果发现某个参数为 nil,那么就给它赋一个缺省值:

  1. function Foo( a, b )
  2.      if nil == b then
  3.          b = 999
  4.      end
  5.      Bar( a, b )
  6.  end

不过这不是一个好的实现,因为函数的用户也许真的想传一个 nil 过来:)

  Lua 有内建对可变参数列表的支持,语法跟 C/C++ 一样,同样是三个英文句点:function Foo( a, … )。在函数内部,Lua 会且仅会把可变参数部分放在一个叫 arg 的表里面,你可以通过 arg.n 得到可变部分的参数的个数。对于我刚才举的这个例子,如果用 Foo( 666, 999 ) 来调用,则 arg.n == 1,用 arg[1] 可以取到 999 这个值。所以我想,用可变参数列表来模拟缺省参数也许是个更好的主意:

  1. function Foo( a, ... )
  2.      if 1 == arg.n then
  3.          Bar( a, arg[1] )
  4.      else
  5.          Bar( a, 999 )
  6.      end
  7.  end

—–

我现在在用的语法着色插件 CoolCode 还不支持 Lua,试了一下发现把 Lua 代码当作 Ruby 来渲染效果也不错,在官方还未支持之前,先这么用着。

This entry was posted on 2007-12-8(星期六) at 21:29 and is filed under Lua. You can follow any responses to this entry through the RSS 2.0 feed. You can skip to the end and leave a response. Pinging is currently not allowed.

2 Responses to “Lua 函数的缺省参数和可变参数列表”

  1. jackwang Says:
    一月 14th, 2010 at 16:22

    如何压入多个函数呢??

    lua_pushcfunction(lua, Msg);
    lua_pushcfunction(lua, Msg1);

    lua_setglobal(lua, “Msg”);
    lua_setglobal(lua, “Msg1″);

    这样好象不行,每次都是 Msg1这个函数被调用,但我的脚本里面是先调用 Msg

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python中的 * 不是指针,相当于不定参数
函数中省略号的意义和用法
Lua丨函数中的可变参数(返回多个参数)~arg的用法
有趣的 Python 特性之当心「默认可变参数」这个大猪蹄子。
IOS 函数传多个参数,动态参数
C++调用JAVA方法详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服