Lua函数用法研究

在Lua 基本语法快速入门中有涉及到函数的用法,但只是普通的应用,并没有深成次的研究一下,介于函数用的还是比较多的就专门做个专题研究一下~ 
 
一、函数、变量的用法

函数的定义用关键字function 。然后加函数名和变量。注意后面没有do。最后以end结束。

在函数中的变量默认是全局变量,但通常情况下函数中的变量都是在函数中有效的。所以要在声明的时候加上"local” 标明只在局部有效。
二、返回多个结果值

在Lua中的函数可以返回多个返回值。这与C等语言有很大的不同。因为从根本上讲Lua支持多赋值。

我猜测在内部运行时,多个返回值被封装到了一个table中。然后在赋值时再按顺序取出。
看这个示例:

function max(a)
 local mi = 1
 local m = a[mi]
 for i,val in ipairs(a) do  --其中i为顺序位置,val为相应的值
  print("i= "..i.."val="..val)
  if val >m then
   mi = i
   m = val
  end
 end
 return m,mi
end 

print(max({8,10,23,12,5})) 

这个函数的作用是返回一个数列中最大的值和下标。

在实际应用的过程中,在C中调用lua_pcall(L,0,2,0) 即可接受这两个返回值入栈,然后通过 lua_tonumber(L,-1) 和 lua_tonumber(L,-2)即可
三、可变参数

Lua 函数可以接受可变数目的参数,和 C 语言类似在函数参数列表中使用三点(...)表示函数有可变的参数。

Lua 将函数的参数放在一个叫 arg 的表中,除了参数以外,arg表中还有一个域 n 表示参数的个数。

例如:

function myprint(...)
 local printResult = ""  --如果不显式声明,程序会自动检查全局的变量,会找不到出错
 print(arg.n)
 for i,v in ipairs(arg) do
  printResult = printResult..tostring(v)..'\t'
 end
 printResult=printResult..'\n'
 return printResult
end 

print(myprint(2,4,6,'2es'))
(0)

相关推荐

  • Lua函数用法研究

    在Lua 基本语法快速入门中有涉及到函数的用法,但只是普通的应用,并没有深成次的研究一下,介于函数用的还是比较多的就专门做个专题研究一下~    一.函数.变量的用法 函数的定义用关键字function .然后加函数名和变量.注意后面没有do.最后以end结束. 在函数中的变量默认是全局变量,但通常情况下函数中的变量都是在函数中有效的.所以要在声明的时候加上"local" 标明只在局部有效. 二.返回多个结果值 在Lua中的函数可以返回多个返回值.这与C等语言有很大的不同.因为从根本上

  • 详解WordPress开发中用于获取分类及子页面的函数用法

    get_category get_category 可能我们平时接触的不多,但却是很有用,网上这个函数介绍的貌似不多,所以今天只针对官方 WordPress 英文文档做一下翻译. 函数描述 获得指定分类,以数组或是对象的形式返回. 函数使用 get_category( $cat, $out, $filter ) 参数描述 $cat:分类ID,或 $out返回值类型[OBJECT, ARRAY_A, or ARRAY_N] $filter 函数返回值 这里主要讲一下对象类型的返回值, 都有注释,请

  • php外部执行命令函数用法小结

    本文实例讲述了php外部执行命令函数用法.分享给大家供大家参考,具体如下: 首先先要自我检讨一下的,学习和使用php已经前前后后一年多了,研究和使用Linux系统也差不多一年了,我居然不知道php这种解释型语言可以直接调用操作命令去操纵系统... 先总结下Linux的操作,常用的cd.cp.mv.rm之类的就不提了,值得总结的第一点是普通用户在提取root权限的时候需要在命令前加上sudo,然后在vi编辑器中输出行号的命令是 :set nu. php的内置函数exec,system都可以调用系统

  • SeaJS中use函数用法实例分析

    本文实例讲述了SeaJS中use函数用法.分享给大家供大家参考,具体如下: 有了 define 等模块定义规范的实现,我们可以开发出很多模块.但光有一堆模块不管用,我们还得让它们能跑起来.在 SeaJS 里,要启动模块系统很简单: <script src="path/to/sea.js"></script> <script> seajs.use('./main'); </script> seajs.use 用来在页面中加载模块.通过 us

  • Oracle 中 decode 函数用法

    含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THEN RETURN(翻译值2) ...... ELSIF 条件=值n THEN RETURN(翻译值n) ELSE RETURN(缺省值) END IF decode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3  当然值1

  • oracle中length、lengthb、substr、substrb函数用法介绍

    我记得我曾经在开发form的时候犯过这样一个错误,对于form中的某个字段,对应于数据库中某张表的字段,假设在数据库中这个字段一般也就用到20个汉字的长度,后来我在开发form的时候,设置item类型长度的时候,我惯性的设置成了50byte,想着就算是20个汉字,最多也就占40个byte长度嘛.可是,就因为这一个想当然,结果出现错误了,后来发现数据库字符集编码是utf8,那么应该设置为60.从那以后,每次涉及到给字段设置长度的时候,我都会特别注意下,到底是啥编码. 在oracle中,比较常见的可

  • Python中max函数用法实例分析

    本文实例讲述了Python中max函数用法.分享给大家供大家参考.具体如下: 这里max函数是Python内置的函数,不需要导入math模块 # 最简单的 max(1, 2) max('a', 'b') # 也可以对列表和元组使用 max([1,2]) max((1,2)) # 还可以指定comparator function max('ah', 'bf', key=lambda x: x[1]) def comparator(x): return x[1] max('ah', 'bf', ke

  • PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】

    本文实例分析了PHP常见字符串处理函数用法.分享给大家供大家参考,具体如下: <?php $s = "hello world"; //整理 echo 'trim(); ltrim(); rtrim()'; echo '<br />'; echo '长度为: '.strlen($s); echo '<br />'; //大小写 echo '首字母大写: '.Ucfirst($s); echo '<br />'; echo '每个单词首字母大写:

  • Yii全局函数用法示例

    本文实例讲述了Yii全局函数用法.分享给大家供大家参考,具体如下: 由于YII致力于完美的整合第三方库,它并没有定义任何全局函数.yii中的每一个应用都需要全类别和对象范围. 例如,Yii::app()->user;Yii::app()->params['name'];等等.我们可以自行设定全局函数,使得代码看起来更加简洁易用. 我们可以保存在globals.php在protected/config目录下.然后,在入口脚本index.php中,定义如下内容: $globals=dirname(

  • delphi字符串分隔函数用法实例

    本文实例讲述了delphi字符串分隔函数用法.分享给大家供大家参考.具体实现方法如下: 该实例可实现根据字符串Separator的表示将字符串s分隔为若干个字符串,存入rs字符串列表中,具体代码如下: 复制代码 代码如下: procedure SeparateTerms2(s:string;Separator:string;var rs:TStringList); var   AStr: string;   idx: Integer;   ASubStr: string; begin   ASt

随机推荐