当前位置: 首页 > news >正文

Lua学习记录(2) --- Lua中的复杂变量类型_function

        在lua中 函数也是一种特殊的变量类型。就和C#中的函数类似,只不过定义的方式有一些不同。同时呢,返回值也会有一些差别

----------------------------------------------------------------函数的声明------------------------------------------

一、函数的声明

        在Lua中的函数一般有如下两种方式声明:

-- 函数也是特殊的变量类型 下面是函数的基本两种声明语法
-- 方式一
-- function 函数名()
-- end-- 方式二
-- a = function()
-- end

下面写一些简单的示例函数

1、无参无返回值函数 

-- 无参数无返回值的函数
function sayHello()print("Hello Lua!")
end
sayHello() -- 调用函数F2 = function ()print("Hello Lua F2!")
end
F2()

2、有参无返回值的函数

        值得注意的是,如果输入的参数和定义时的参数个数不匹配的话,会自动丢弃某些参数。如果不传参数的话,默认传参为nil

-- 有参数无返回值的函数 不传参的话就会认为是参数为空
-- 如果传入参数和格式不匹配 只会补空或者丢弃多余参数
function sayHelloName(name)print("Hello "..name.."!")
end
sayHelloName(555)

3、有参有返回值的函数

在lua中 是允许多返回值的 你可以一个return 返回出去多个结果。只要你在接受的时候用多个容器来接收就行。

-- 有返回值的函数
-- 多返回值的时候 在前面声明多个变量来接取 如果变量
-- 不够的话 默认丢弃多余的 返回值不够的话 默认补nil
function F4(a)return a,12,true
end
temp1,temp2,temp3 = F4(100)
print("temp1="..temp1.." temp2="..temp2.." temp3="..tostring(temp3))

函数也是有类型的 函数的类型就是function 可以使用type进行查看哦

--------------------------------------------------------函数的重载-----------------------------------------------------

二、函数的重载

        在lua中是不支持函数重载的,后定义的函数会默认覆盖前面定义的函数的!

---------------------------------------------------------变长参数---------------------------------------------------------

三、变长参数

        在C#中我们可以通过关键字params进行未知参数个数的传递,那么在lua中怎么实现呢?通过 ... 这样进行参数传递即可。例如:

        这里的表,我们会在后面的文章中继续学习,这里大家就记住这种写法就是变长参数的传递了!使用的话,就按照代码中写的使用方式进行使用即可。这个#还记得吗,就是取长度的关键符号

-- 变长参数
function F7(...)-- 变成参数使用必须先用一个表存起来再用arg = {...} -- 把变参放到一个表里for i=1,#arg doprint("arg["..i.."]="..tostring(arg[i]))end
end
F7(1,"hello",true,5.6)

-------------------------------------------------------函数的嵌套-------------------------------------------------------

四、函数的嵌套

        既然函数也是一个变量,那么我们呢,就可以返回一个函数出去,如下,这就是函数的嵌套

-- 函数的嵌套
function F8()return function ()print("Hello Lua F9!")end
end

        然后这样使用就行了

f9 = F8() -- 先调用外层函数
f9() -- 再调用内层函数

        利用在C#中学习过的知识我们可以很敏锐的发现,函数之间的嵌套很容易发生闭包的问题,什么是闭包呢,闭包就是函数中的变量生命周期并没有按照函数的结束而消失,反而继续存在。如下:当我们执行完F9函数后,居然能够在f10中仍能体会到x的影响,这就是闭包

function F9(x)-- 改变了传入参数的生命周期return function (y)return x + yend
end
f10 = F9(5555);
print("闭包结果为"..f10(5)) -- 传入参数

好的 今天的function学习之旅到此结束!下面我们将要学习的是table!

http://www.dtcms.com/a/603613.html

相关文章:

  • 外贸网站一站式海外推广家具做网站
  • IT做网站工资怎么样优质ppt模板免费下载
  • 站长工具seo下载岳阳网络推广公司
  • wordpress媒体库显示海口网站seo
  • 河南网站域名备案环保网站可以做哪些内容
  • 网站怎么提高收录自己做的网站怎么发布
  • 最好国内免费网站空间绵阳吉工建设
  • 网站404怎么做关于网站建设方案
  • 做ppt常用的网站有哪些做生存分析的网站有哪些
  • 上海知名建站公司大型网站制作设计
  • 济宁网站开发正规网站做菠菜广告
  • 任县网站建设价格信息免费logo图标在线制作设计
  • 网站建设教程 冰美人视频seo关键词排名优化评价
  • 怎么建设两个大淘客网站.net网站开发后编译
  • 河南省住房城乡和建设厅网站济南网站建设方案案例展示
  • 网站优化垂直化好还是扁平化好做百度手机网站点击软
  • 贵阳网站建设兼职移动课程播放网站建设多少钱
  • sql网站开发在线美图秀秀在线制作
  • 提供网站建设公司网站使用字体
  • 自己开公司 自己做网站吗深圳的网站建设公司
  • c语言编译器vc6.0|探索其历史、特点与使用方法
  • 舞钢市城乡建设局网站圣诞节网站怎么做
  • 小说网站怎么推广哪个网站做阿里首页模板
  • 网站seo知识网站首页排名突然没了
  • 好网站建设因素阿里云服务器怎么安装wordpress
  • 有哪些可以在线做app的网站有哪些问题贵阳做网站好的公司
  • 织梦移动网站南宁企业网站建站模板
  • 南京做企业网站公司网站建设学生选课课程设计报告
  • 推广网站的方法有哪些做商城网站建设哪家好
  • 商业活动的网站建设自媒体包括哪些平台