`
wx1569488408
  • 浏览: 75229 次
文章分类
社区版块
存档分类
最新评论

Lua函数重载

 
阅读更多

       Lua不支持像C那样的重载,例如,像下面这种形式在Lua中无法得到预期结果

function Add(a,b)
    return a + b
end
 
function Add(a,b,c)
    return a + b + c
end

但是,Lua中函数对于传入的参数个数也很宽松,它会自动去适应传入的参数,如果传入的参数个数多于定义的个数,则会自动忽略后面多于的参数,如果传入的参数个数少于定义的个数,则会将不足的参数用nil补齐。例如,上述希望实现的重载可以用下面的形式完成:

function Add(a,b,c)
         if c == nil then
             return a + b
         else
             return a + b + c
         end
end


调用时,可以使用Add(1,2),也可以使用Add(1,2,3),当然也可以使用Add(1,2,3,4)不过最后的实参4会被忽略,其结果和Add(1,2,3)相同。



转载于:https://my.oschina.net/walkfaraway/blog/550322

分享到:
评论

相关推荐

    lua 热重载机制

    在 Lua 中,热重载可以通过巧妙地利用元表(metatable)、require 函数以及文件系统监控来实现。 首先,我们需要理解 Lua 的 require 函数。require 是用来加载和执行 Lua 模块的,它会检查模块是否已经被加载过,...

    lua学习资料lua学习资料lua学习资料lua学习资料lua学习资料

    3. **闭包与匿名函数**:Lua支持闭包,这是一种强大的功能,可以用来实现函数工厂、延迟计算等功能。匿名函数(lambda函数)也常常与闭包一起使用。 4. **模块与包管理**:Lua通过require函数加载模块,可以创建...

    LUA_API5.1

    C API提供了创建、运行、交互和管理Lua状态机的接口,以及调用Lua函数、注册C函数到Lua环境等功能。 “LUA_API5.1”提供的文档可能详细介绍了这些概念,帮助开发者理解和使用Lua 5.1的特性。通过学习和查阅《My_...

    Lua-C 绑定库LuatinkerE.zip

    支持普通函数、类成员函数、构造函数支持函数默认参数及带默认参数的重载函数的匹配移除int64相关函数,使用lua5.3的luaInterager来替代支持调用lua函数时返回多个返回值用tuple包裹支持通过宏定义打开类型一致性...

    Lua语法进阶,Lua入门

    Lua 语言进阶教程 - 语法基础和运算符重载 Lua 语言是一种轻量级的脚本语言,广泛应用于游戏开发、嵌入式系统和其他领域。为了深入掌握 Lua 语言,需要了解其语法基础和运算符重载。 Lua 语法基础 Lua 语言的语法...

    LUA进阶源代码欣赏

    LUA的元表机制使得我们可以为表添加自定义的行为,比如重载算术运算符。元方法则是在调用特定操作时,通过元表触发的函数。理解并掌握元表和元方法对于编写高级LUA程序至关重要。 3. **闭包与匿名函数** LUA支持...

    Lua_API.rar_lua_lua api

    这包括了加载和运行Lua脚本、创建和修改Lua对象、调用Lua函数等。 9. **模块系统**:通过`require()`函数,我们可以导入和使用其他Lua模块,实现代码的组织和复用。 10. **线程和协程**:Lua的线程(coroutine)是...

    用lua4.0模仿c++的指针和类的脚本以及lua4.0编译器

    而通过覆盖父类的方法,可以实现函数重载。 在`new.lua`文件中,很可能是实现了创建对象的函数,模仿C++的`new`操作符。在Lua中,`new`函数通常用于创建并初始化一个新对象。这个过程可能包括创建一个新的表,将...

    Lua 编程语言 中文教程

    7. **元编程能力**:Lua的元表(metatable)机制允许用户自定义数据类型的操作行为,比如重载算术运算符和索引操作,增强了语言的灵活性。 8. **热更新**:在游戏开发中,Lua代码可以热更新,无需重启游戏即可修改...

    Lua 5.3 参考手册

    3. **函数和闭包**:Lua 支持匿名函数,函数可以作为值传递,且具有第一类公民地位。闭包允许函数访问并修改其创建环境中的变量,是实现许多高级编程技巧的基础。 4. **元表与元方法**:通过元表,可以自定义对象的...

    安卓lua命令行

    2. **多返回值**:函数调用可以返回多个值,这对于函数重载和元方法处理非常有用。 3. **字面量语法**:增加了对表格(table)字面量的新语法,使代码更简洁易读。 4. **元表增强**:允许在元表中设置`__index`和`__...

    lua 中文教程

    Lua支持匿名函数(闭包)和函数式编程风格。`function`关键字用于定义函数,`return`语句用于从函数中返回值。 字符串处理是Lua的一大亮点,它提供了丰富的字符串操作函数,如sub、find、rep等。Lua字符串是不可变...

    lua程序设计

    Lua还提供了元表(metatable)机制,允许用户自定义类型行为,比如重载操作符。 Lua的模块系统也是其一大特色。通过require函数,我们可以加载并使用外部模块,实现代码的组织和复用。模块可以通过return语句导出...

    Lua程序设计(第二版).rar

    3. **函数**:Lua中的函数是第一类值,可以作为参数传递,也可以作为返回值。函数定义使用function关键字,支持局部变量和闭包。 4. **表**:Lua的表是其核心特性,可以用来实现数组、集合、记录、类等复杂数据结构...

    lua5.2 source i need

    - **元表元方法重载**:在 Lua 5.2 中,你可以通过 `__index` 和 `__newindex` 元方法重载索引和赋值操作,这使得类模拟更加灵活。 - **错误处理**:Lua 5.2 引入了新的错误处理机制,`error` 函数现在会返回一个...

    Lua Performance Tips.rar

    利用Lua的表达式求值顺序,以及理解函数调用开销,可以帮助编写出更高效的代码。 9. **预编译和热重载** Lua允许预编译脚本为字节码,减少运行时的解释成本。此外,热重载可以实现在不重启应用的情况下更新代码,...

    LuaBind 源码 (Lua增强库)

    为了调用一个Lua函数, 你可以或者用 call_function() 或者用 一个对象(object). template Ret call_function(lua_State* L, const char* name, ...) template Ret call_function(object const& obj, ...) call_...

    Lua类工具包《BjaClassTool》,完全模拟,公有私有属性/静态,继承,运算符重载等等!

    函数重载是另一种提升代码灵活性的手段,它允许在同一个类中定义多个同名但参数不同的方法。`BjaClassTool`实现了这个功能,使得开发者可以根据传入的参数类型或数量选择执行不同的函数,增加了代码的可读性和可维护...

    Lua IDE ZEROBRANE 下载

    10. **热重载**:ZEROBRANE Studio支持代码热重载,即在不重启程序的情况下,开发者可以即时看到代码更改的效果,大大加快了开发迭代速度。 下载ZEROBRANE Studio后,你将得到一个包含所有这些功能的压缩包。解压后...

    lua-hot-reload:Lua模块,可对任何复杂性的项目进行“智能” Lua热重装

    Lua Hot Reload库 单个文件模块,可让您在项目中热重载Lua代码。 注意:该项目处于beta阶段,可能包含错误。要求LuaJIT或Lua 5.2+ 可选的 对于Lua5.1,支持非常有限,除非您通过提供upvalueid和upvaluejoin函数。 ...

Global site tag (gtag.js) - Google Analytics