就Lua闭包相关内容的浅谈

                                     就Lua闭包相关内容的浅谈


目录

1、博客内容

2、内容

什么是闭包:

闭包的作用:

3、推送

4、结语


1、博客内容

本篇为Lua的学习笔记之一,就Lua闭包相关内容的浅谈,首先本篇文章需要对Lua有基本的认识,之前文章就谈过,博主学习东西一般是先学会怎么用,等到用熟练了才会再去深究其意,所以博主发的大多数文章都是在介绍用法而不是很底层的东西,博主也希望能通过很简单直白的语言来介绍其用法,本篇博客主要作为学习记录。


2、内容

什么是闭包:

我们知道Lua作为一门脚本语言,写法上是很宽泛的,我们可以在任意的地方去声明方法变量,只不过是作用域的不同,那什么是闭包呢,就博主的理解,方法内再内嵌方法的形式就可以称之为闭包,如下所示:

function outFunc()
	function insideFunc()
		-- body
	end
end

但这并非是闭包的完整形态,insideFunc作为outFunc的内嵌函数,通常情况下我们在外部是调用不到insideFunc,这个时候我们可以稍稍做些更改,将内嵌函数insideFunc作为外部函数outFunc的返回值,我们就可以在外部通过调用outFunc来获取内嵌函数,这个就是闭包最基本的内容,结构如下所示:

function outFunc()
	function insideFunc()
		--body
	end
	return insideFunc
end

闭包的作用:

以上我们知道了闭包是什么,那么现在我们来看看这个闭包能够做什么吧,首先我们在外部outFunc内声明一个变量,并且在内嵌函数insideFunc内对该变量进行操作,结构如下所示:

function outFunc()
	local testNum = 1
	function insideFunc()
		testNum = testNum*10
		print("输出:"..testNum)
	end
	return insideFunc
end

首先我们要知道一件事情,我们每次调用outFunc都会去新声明一个testNum属性和insideFunc方法,这些不同次调用所生成的testNum和insideFunc虽然名字相同,但是相互独立,举个例子,我们调用两次outFunc,并用两个变量来接受outFunc的返回值,再分别调用这两个变量来查看结果,如下所示:

local func1 = outFunc()
local func2 = outFunc()


-------------------------调用并输入结果

print(func1())
输出:10
print(func1())
输出:100
print(func2())
输出:10
print(func1())
输出:1000

我们分别用func1和func2来接受两次调用outFunc的结果,也就是内嵌函数insideFunc,然后我们调用func1两次,func2一次,再调用func1一次,我们发现调用func1后,他对内部的testNum进行了X10的操作,并且保存下来了这个记录,当我们下次再调用func1时他内部的testNum就是从上次记录下来的10进行操作,得出了结果100,之后我们调用func2获取结果10,func2内部的testNum并不会受到func1的影响,这证明了其相互的独立性。

看到这里不知道有没有人感到一种似曾相识的感觉,实例对不对,Lua是没有面向对象这一概念的,在像其他语言如Java,C#等,我们可以对一个对象进行实例,实例后的新对象,有和原对象相同的属性和方法,我们可以对其修改,那么现在看来Lua的闭包和实例是何曾的相像,如此我们就可以知道闭包的作用之一就是来模拟面向对象,外层函数用来储存变量和方法,内部变量方法实现对内部变量的修改。


3、推送

Github:https://github.com/KingSun5


4、结语

        本篇博客是对闭包的浅谈,下一篇博客的内容,博主将利用闭包和实现面向对象的过程,当然模拟面向对象只是闭包的作用之一,欢迎大家来补充闭包的其他作用,若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。

       QQ交流群:806091680(Chinar)

       该群为CSDN博主Chinar所创,推荐一下!我也在群里!

猜你喜欢

转载自blog.csdn.net/Mr_Sun88/article/details/105178445
今日推荐