Lua 函数

简介: Lua 函数

1、概念

在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。

Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上。

Lua 函数主要有两种用途:

1.完成指定的任务,这种情况下函数作为调用语句使用;
2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。 

基本写法

function 函数名()
end

还有一种特殊写法

a(变量)=function()
end

==我感觉像lua这种随便的语言,写起来爽了,维护起来就要疯了0.0==
在这里插入图片描述

2、操作

2.1 无参数无返回值

--无参数无返回值
--跟C#不一样,lua是从上到下执行的,不能在一个函数之前调用函数
function F1()
    print("函数被调用")
end

F1()

还有另外一种写法

--这种写法可以把它理解为把名字提前写了(不完全是)
--有点类似于C#中的委托和事件,通过赋值的形式去等于一个函数
F2 = function()
    print("F2函数被调用")    
end
F2()

在这里插入图片描述

==注意:跟C#不一样,lua是从上到下执行的,不能在一个函数之前调用函数(会报错)==
因为lua是解释型语言,使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译和执行,而不是像编译型语言在执行之前就完成翻译。
在这里插入图片描述

2.2 有参函数

--有参函数
--函数类型不指定,可以传任意的参数进去
function F1(a)
    print(a)
    end
F1(1)
F1('666')
F1(true)
F1(nil)
--像下面这两个操作这放在C#中肯定会报错
F1()--不会报错 只会补空nil 或者丢弃
F1(6,6,6)--不报错,传入参数与函数参数不匹配,取第一个参数

2.3 有返回值函数

--有返回值函数
function F2(a)
    return a
end
Temp = F2(666)
print(Temp)

在这里插入图片描述
我们再来搞点骚操作
我们return多个参数,但lua只返回了读取的第一个参数,相当于其他参数都被丢弃了
在这里插入图片描述
如果我们想要多个返回值
正确写法

function F2(a)
    return a,"123",true
end
--多返回值时 在前面申明多个变量来接取即可
--就一一对应了,在声明变量的时候也可以,比如a=1,b=2 ,直接写成a,b=1,2
Temp,temp2,temp3 = F2(666)
print(Temp)
print(temp2)
print(temp3)

在这里插入图片描述
==总结一下==
就是这个语言太随便了

  • 多返回值时,在前面申明相对应的变量来接取就行
  • 如果变量不够,不报错,直接接取对应位置的返回值(后面的都不要了)
  • 如果变量多了,不报错,直接赋值nil

2.4 获取函数类型

F3 = function ()
    print('lua真随便')
end

print(type(F3))

2.5 函数的重载(Lua不支持)

--lua不支持函数的重载
--函数名相同,参数类型不同或者参数个数不同叫函数的重载
--lua会默认调用最后声明的函数
--举个例子
function F4()
    print('hello')
end

function F4(str)
     print('Bye')
end
F()

在这里插入图片描述

2.6变长函数

--变长参数
--通过for循环把传进函数的参数都打印出来
function F5( ... )
    nums={...}
    for i=1,#nums do
        print(nums[i])
    end
end

F5(1,2,3,4,5,6)
print('--------------------------------------')
F5(6,"hello",true,nil)--不同参数也可以打印

nums的作用

在这里插入图片描述

在这里插入图片描述

2.6函数嵌套

--函数嵌套
function F6()
    return function ()
        print('嵌套函数')
    end
end

F7 = F6()
F7()

在这里插入图片描述


--闭包

--外部传进来的这个x实际上会产生一个临时变量,我们把这个X包裹到了function (y) return x+y  end这个函数里面
--相当去在这改变了传入参数的    生命周期
function F8(x)
    return function (y)
        return x+y
    end
end

F9 = F8(2)--按理说这个F8(2)执行完毕就没有用了,但我们改变了函数的生命周期,把那个2放到了function (y)这个函数里面去了
print(F9(1))--F9实际上执行的是 function (y)这个函数

在这里插入图片描述

相关文章
|
6月前
|
存储 C语言 图形学
C 函数中如何保存 Lua 的数据(1)
C 函数中如何保存 Lua 的数据(1)
92 0
|
存储 Java C语言
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
95 0
|
1月前
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
Lua的面向对象编程、协同线程与协同函数的概念和使用,以及Lua文件I/O操作的基本方法。
28 4
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
|
1月前
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
57 1
|
6月前
|
C语言 C++ 索引
C 函数中如何保存 Lua 的数据(2)
C 函数中如何保存 Lua 的数据(2)
79 1
[✔️]lua中的module函数
[✔️]lua中的module函数
205 0
|
XML Java 数据格式
【Lua基础 第4章】Lua的流程控制、#的作用、table的创建方式、table表常用方法、函数、多返回值、可变长参数
Lua的流程控制、#的作用、table的创建方式、table表常用方法、函数、多返回值、可变长参数
148 0
【Lua基础 第4章】Lua的流程控制、#的作用、table的创建方式、table表常用方法、函数、多返回值、可变长参数
|
数据采集 大数据 开发者
Lua 语法函数|学习笔记
快速学习 Lua 语法函数
Lua 语法函数|学习笔记
|
C语言 索引
lua语言——函数
lua语言——函数
153 0