Lua函数用法研究_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'))

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索函数
, lua
用法
lua require的用法、lua 用法、lua string.pack用法、lua or 的用法、lua pcall的用法,以便于您获取更多的相关知识。

时间: 2024-08-03 11:15:34

Lua函数用法研究_Lua的相关文章

Lua之wrap函数用法示例_Lua

wrap和Create差不多,都是去创建一个coroutine,有些区别: 1,wrap不会通过resume去得到第一个返回值(错误信息) 2,在创建完之后,直接调用函数,转到coroutine,而create却要resume才能转到coroutine. 3,wrap不能查看状态. 例子代码: 复制代码 代码如下: do      function createWrap()          return coroutine.wrap(function(x)                   

Lua loadstring函数用法实例_Lua

该函数的返回值是返回一个function,如果load失败,则返回nil 例子代码: 复制代码 代码如下: --i = 32  local i = 0  f = loadstring("i = 1 + i; print(i)");  g = function ()          i = 1 + i;          print(i)      end  f()  g()  f操作的全局i,g操作的是局部i,因为,loadstring总是在全局环境中去编译它的字符串 loadstr

Lua UnPack函数用法实例_Lua

unpack它接受一个数组(table)作为参数,并默认从下标1开始返回数组的所有元素,例子代码如下: 复制代码 代码如下: do  arrayData = {"a", "b", "c", "d", "e"};  function returnMoreValues()   return 1, 2, 3;  end  a, b, c = returnMoreValues();  --print(a, b, c

Lua select函数用法实例_Lua

调用select时,必须传入一个固定实参selector(选择开关)和一系列变长参数.如果selector为数字n,那么select返回它的第n个可变实参,否则只能为字符串"#",这样select会返回变长参数的总数.例子代码: 复制代码 代码如下:  do  function foo(...)   for i = 1, select('#', ...) do //get the count of the params    local arg = select(i, ...);//s

Lua教程(四):函数详解_Lua

一.函数:     在Lua中函数的调用方式和C语言基本相同,如:print("Hello World")和a = add(x, y).唯一的差别是,如果函数只有一个参数,并且该参数的类型为字符串常量或table的构造器,那么圆括号可以省略,如print "Hello World"和f {x = 20, y = 20}.     Lua为面对对象式的调用也提供了一种特殊的语法--冒号操作符.表达式o.foo(o,x)的另一种写法是o:foo(x).冒号操作符使调用o

C语言中调用Lua函数实例_Lua

记得上学时,初中英文课本中,上网叫做surfing the internet,中文叫网上冲浪.那个时期,人们经常称互联网为赛博空间.如今工作了,大量的零碎时间用于上微博,知乎,QQ,这些碎片化的阅读让人读起来轻松,也能获取些粗浅的信息.然而它们是消耗时间的黑洞,时间就这样一分一秒地飞逝,年末的时候,知乎会告诉你回答了多少问题,阅读了相当于一部<红楼梦>那么多的文字.只是当你静下来一想,这些浅阅读并没给你带来有深度,系统的知识.在你的时间线上,两条相邻信息往往是八竿子也打不着的.而且你还时不时去

Lua中的模块与module函数详解_Lua

很快就要开始介绍Lua里的"面向对象"了,在此之前,我们先来了解一下Lua的模块. 1.编写一个简单的模块 Lua的模块是什么东西呢?通常我们可以理解为是一个table,这个table里有一些变量.一些函数- 等等,这不就是我们所熟悉的类吗? 没错,和类很像(实际上我说不出它们的区别).   我们来看看一个简单的模块,新建一个文件,命名为game.lua,代码如下: 复制代码 代码如下: game = {} function game.play()     print("那么

Lua中的常用函数库汇总_Lua

lua库函数 这些函数都是Lua编程语言的一部分, 点击这里了解更多. assert(value) - 检查一个值是否为非nil, 若不是则(如果在wow.exe打开调试命令)显示对话框以及输出错误调试信息 collectgarbage() - 垃圾收集器. (新增于1.10.1) date(format, time) - 返回当前用户机器上的时间. error("error message",level) - 发生错误时,输出一条定义的错误信息.使用pcall() (见下面)捕捉错误

C语言模块回调Lua函数的两种方法_Lua

lua和C通过虚拟栈这种交互方式简单而又可靠,缺点就是C做栈平衡稍微会多写一点代码. 今天分享学到的C模块回调Lua函数的两种方法,都是炒冷饭,大侠勿喷. 1. C保存函数对象 C模块可以通过注册表保存Lua里面的对象,等适当时候取出再调用即可. 复制代码 代码如下: static int lua_callback = LUA_REFNIL; static int setnotify(lua_State *L) {   lua_callback = luaL_ref(L, LUA_REGISTR