Lua 函数

函数(子程序) 是一段可以执行的代码,他通常包含函数名,出入参数,函数体,返回值(传出参数)。他可以方便代码管理,把常用的代码写成函数方便重复利用。
内容摘要:函数 函数定义 函数调用 函数参数

函数定义:

funcname = function( [parlist1] ) 
    funcbody  
end

函数名 funcname ::= Name {'.' Name} [':'Name]
形参 parlist1 ::= namelist [`,´ `...´] | `...´

函数实例
  --~ 一个简单的函数包含一些常用的基本信息
  --~ 传入任意多的整数然后求和
  addsum = function (a,...)
      local arg={...};
      local sum = a;
      for i, v in ipairs(arg) do
           sum = sum + v
      end
      if(#arg > 0) then
          --返回多值
          return sum,#arg
      else
          --返回单值
          return sum
      end
end

r1,r2 = addsum(1,2)      --结果 3
print(r1,r2)          --结果 3    nil
r1 = addsum(1,2,3,4)     --结果 10 
print(r1,r2)          --结果 3    2

函数调用

Lua的函数调用的语法如下:

形式一:直接调用

functioncall ::= functionname '(' args ')'
函数调用的第一步是对 functionname 和args求值。 如果 functionname的值的类型是 function类型, 那么这个函数就被用给出的参数调用。 否则 functionname的元方法 "call" 就被调用(具体信息查看Metatable元表)。

形式二:方法调用

--定义为table的一个方法进行调用
functioncall ::= tablename'.'functionname '('args')'

--语法糖
functioncall ::= tablename':'functionname '('args')'
--他会程序被解释成 tablename.functionname(tablename,args)
--这里 tablename 只会被求值一次

参数传入和返回

--定义 
addsum(a)   return r1,r2,r3

s1,s2 = addsum(a,b)
-- 传入参数 b丢弃,传出参数 r3丢弃

s1,s2,s3,s4 = addsum(a,b,c)
-- 传入参数 b,c 丢弃,接收参数s4为nil

Lua 函数可以接受固定和可变数目的参数

  • 固定参数 提供具体的参数形参名称,在函数体内直接使用。
  • 可变参数 通过三个点(...) 表示,在函数体内直通过放入表{}中,然后可以通过泛型for循环 取出来使用。(参见本章示例)
  • Lua函数的传入、传出参数如果没有对应的接收参数将被丢弃。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容

  • 函数有两种用途: 完成指定任务,此时函数作为调用语句使用。 计算并返回值,此时函数作为赋值语句的表达式使用。 调用...
    JunChow520阅读 3,751评论 0 3
  • 伟人之所以伟大,是因为他与别人共处逆境时,别人失去了信心,他却下决心实现自己的目标。 在Lua中,函数是对语句和表...
    亮亮同学阅读 546评论 0 0
  • Lua 函数 作者:杨梦鸽 校对:翟舒青 在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特...
    木易林1阅读 401评论 0 0
  • 在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。 Lua ...
    谁说我是小小云阅读 306评论 0 0
  • 函数 在lua中,函数是对语句和表达式进行抽象的主要方法,皆可以用来处理一些特殊的工作,也可以用来计算一些值.主要...
    IT白鸽阅读 264评论 0 1