Lua function "named args" implement by table type

当一个lua函数的参数个数非常多时, 我们在调用一个函数时可能会忘记参数的顺序. 例如

function divide(a,b)
  return a/b
end

调用这个函数时, 如果把输入的参数搞反了, 结果是完全不一样的.

> print(divide(1,2))
0.5
> print(divide(2,1))
2

参数越多, 越容易搞错顺序.

使用table作为函数参数, 有一个好处是, 不需要记忆函数参数的顺序, 只要TABLE的元素内容一样就可以了, 例如

> function divide1(args)
>>   return args.a/args.b
>> end
> print(divide1 {a=1, b=2})
0.5
> print(divide1({a=1, b=2}))
0.5
> print(divide1({b=2, a=1}))
0.5

输入的顺序无所谓, 只要元素对应的值一样就可以了.

时间: 2024-11-23 12:18:45

Lua function "named args" implement by table type的相关文章

Lua non-global stored (exp: local and table elements) function

上一篇聊了一下Lua函数, 严格来说聊的是closure. 包含两个部分, 1个是变量部分, 一个是定义部分.Lua函数/closure一般存储在全局变量中, 但也可以存储在本地变量或者表的元素中. 例如 :  io.open, 这个函数其实就是存储在io这个表里面的. > print (io.open) function: 0x12a34e0 > print (io) table: 0x1283fc0 把函数存储在表中, 支持三种定义方法. > tbl = {} > tbl.f

Lua中的weak表——weak table(转)

弱表(weak table)是一个很有意思的东西,像C++/Java等语言是没有的.弱表的定义是:A weak table is a table whose elements are weak references,元素为弱引用的表就叫弱表.有弱引用那么也就有强引用,有引用那么也就有非引用.我们先要厘这些基本概念:变量.值.类型.对象. (1)变量与值:Lua是一个dynamically typed language,也就是说在Lua中,变量没有类型,它可以是任何东西,而值有类型,所以Lua中没

jQuery技巧之让任何组件都支持类似DOM的事件管理_jquery

本文介绍一个jquery的小技巧,能让任意组件对象都能支持类似DOM的事件管理,也就是说除了派发事件,添加或删除事件监听器,还能支持事件冒泡,阻止事件默认行为等等.在jquery的帮助下,使用这个方法来管理普通对象的事件就跟管理DOM对象的事件一模一样,虽然在最后当你看到这个小技巧的具体内容时,你可能会觉得原来如此或者不过如此,但是我觉得如果能把普通的发布-订阅模式的实现改成DOM类似的事件机制,那开发出来的组件一定会有更大的灵活性和扩展性,而且我也是第一次使用这种方法(见识太浅的原因),觉得它

Lua中的table学习笔记_Lua

table 在 Lua 里是一种重要的数据结构,它可以说是其他数据结构的基础,通常的数组.记录.线性表.队列.集合等数据结构都可以用 table 来表示,甚至连全局变量(_G).模块.元表(metatable)等这些重要的 Lua 元素都是 table 的结构.可以说,table  是一个强大而又神奇的东西. table 特性 在之前介绍 Lua 数据类型时,也说过了 table 的一些特性,简单列举如下(详情可查看之前的介绍): 1.table是一个"关联数组",数组的索引可以是数字

Lua中的table浅析_Lua

Lua的table提供了Map的功能,实现了"关联数组",并且整数.字符串甚至nil都可以作为索引/key:table没有固定的大小.   基于table,可以表示普通数组.符号表.集合.记录.队列和其他数据结构.   而Lua也是通过table来解决模块(module).包(package)和对象(Object)的. 例如io.read表示使用"read"来索引table io.   在Lua中,table既不是值也不是"变量",而是对象,可以

Lua中函数的几个特别之处探究_Lua

没想到距离上一篇基础补充已经过了1年多了,最近准备捡回Lua,把基础都补补,今天来聊聊Lua的函数吧~ 0.环境 我突然对Lua又大感兴趣的最主要原因是,Cocos Code IDE开始浮出水面了,它是Cocos2d-x官方出的一款专门针对Cocos2d-x+Lua或JS的IDE,试着用了,虽然不能说很完美,但,很值得期待. 所以,本文使用的Lua编辑器就选它了,大家就随意吧~ 1.扫盲--Lua的函数 Lua要创建和调用函数都十分简单,如代码: 复制代码 代码如下: function muto

Bootstrap Table总结

一.使用 导包: 1.Jquery 2.bootstrap组件(js+css) 3.bootstrap table组件及中文包(js+css+js) 代码: 例一:                        <table id="table"></table> <script> $(function () { //1.初始化Table var oTable = new TableInit(); oTable.Init(); //2.初始化Butt

【COCOS2DX-LUA 脚本开发之五】LUA 使用OOP(面对对象思想编程),免BINDING创建自定义LUA类

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/lua-game/1282.html 上一篇中,向童鞋们介绍了如何自定义类binding到Lua中供给使用的教程,那么本篇将介绍利用OOP思想在在Lua中进行创建一个自定义类.    首先Himi来向大家讲解如何在Lua中不binding来自定义lua类,其实这种方式在Cocos2dx的Lua Samples已经为我们做好了例子,就看童鞋们是否

Lua面向对象设计(转)

首先对于Lua语言,它没有打算被用来进行大型的程序设计,相反,Lua目标定于小型到中型的程序设计,通常是作为大型系统的一部分,所以它只提供了一套精简的元素,很多高级语言的概念都没有.这样Lua就成为了一个既简单又灵活的轻量级语言,但是基本上高级语言中的大多数机制都可以在现有Lua的基础上加以实现. 面向对象的基础是类,但Lua中没有提供类的概念,所以我们需要利用Lua现有的机制来实现类似于类的有关oop的一整套概念.基本方案是使用table来实现类机制,并且结合使用self参数和冒号操作.我们先