Skip to content
viruscamp edited this page Feb 28, 2017 · 7 revisions
  • Lua 5.1
    • is_vararg = 0
      a function without param ...
      不带 ... 参数的函数

    • is_vararg = 2
      main function, can use ... , arg is always global
      主函数,可以用 ... , arg 是全局变量
      standalone interpreter(lua.exe) set global arg (_G.arg) with command line arguments , {} at least
      独立解释器(lua.exe) 会用命令行参数填充 全局变量 arg (_G.arg) ,至少会是 {}

    • #define LUA_COMPAT_VARARG

      • function defined with ..., like function f(...) or function f(x,...)
        有 ... 参数的函数, 比如 function f(...) 或 function f(x,...)
        always has extra local param arg
        始终有一个额外的局部参数 arg
      • is_vararg = 3
        use ... in function body, arg = nil
        在函数中用了 ... , 此时 arg = nil
        compiled binary chunk can be executed in a lua.exe without LUA_COMPAT_VARARG defined
        此函数在编译后可以在没定义 LUA_COMPAT_VARARG 的解释器 lua.exe 中运行
      • is_vararg = 7
        not use ... in function body, extra local param arg = {...}, for source compatity with 5.0
        函数中没有使用 ... , 此时额外的局部参数 arg = {...} ,源码兼容 5.0
        compiled binary chunk cannot be executed in a lua.exe without LUA_COMPAT_VARARG defined
        此函数在编译后不能在没定义 LUA_COMPAT_VARARG 的解释器 lua.exe 中运行

-- R0 : param arg -- R1 : param a -- R2 : vararg arg -- R3 : local arg -- R4 : local a local function vararg_var3(arg,a,...) -- LUA_COMPAT_VARARG is_vararg=3 , vararg as local arg=nil , override param arg local arg = 3 -- override vararg arg local a = 4 -- override param a return {...} end

local function vararg_var7(arg,a,...) -- LUA_COMPAT_VARARG is_vararg=7 , vararg as local arg={...} , override param arg local arg = 3 -- override vararg arg local a = 4 -- override param a return nil end



  * \#undef LUA_COMPAT_VARARG  
    * is_vararg = 2  
      function defined with ..., like function f(...) or function f(x,...)  
      有 ... 参数的函数, 比如 function f(...) 或 function f(x,...)  
      extra local param arg will not be defined  
      不会定义默认额外的局部参数 arg  
      compiled binary chunk can be executed in a lua.exe with LUA_COMPAT_VARARG defined  
      此函数在编译后可以在定义了 LUA_COMPAT_VARARG 的解释器 lua.exe 中运行  


+ Lua 5.2 and 5.3
  * is_vararg = 0  
    a function without param ...  
    不带 ... 参数的函数  
  * is_vararg = 1  
    a function use ... , main included  
    带 ... 参数的函数, 包括主函数  
    standalone interpreter(lua.exe) set global arg (_G.arg) with command line arguments , {} at least  
    独立解释器(lua.exe) 会用命令行参数填充 全局变量 arg (_G.arg) ,至少会是 {}