scala22-Scala中的闭包

本文深入探讨Scala中的闭包概念,包括闭包的定义、如何在实际编程中运用闭包,以及闭包与自由变量的关系。通过具体的代码示例,帮助读者理解闭包的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容:

1、Scala闭包解析

2、Scala闭包实战

		val data = List(1, 2, 3, 4, 5, 6)
		var sum = 0
		data.foreach(sum += _)

闭包(除了其作用域可以继续使用它)

<span style="white-space:pre">	</span><p><span style="color:rgb(92, 92, 92);"><span style="white-space:pre">	</span>1 </span>scala> var more = <span style="color:rgb(192, 0, 0);">1</span> </p><p><span style="color:rgb(92, 92, 92);"><span style="white-space:pre">	</span>2 </span>more: Int = <span style="color:rgb(192, 0, 0);">1</span> </p><p><span style="color:rgb(92, 92, 92);"><span style="white-space:pre">	</span>3 </span>scala> val addMore = (x: Int) => x + more  </p><p><span style="color:rgb(92, 92, 92);"><span style="white-space:pre">	</span>4 </span>addMore: (Int) => Int = < function>  </p><p><span style="color:rgb(92, 92, 92);"><span style="white-space:pre">	</span>5 </span>scala> addMore(<span style="color:rgb(192, 0, 0);">10</span>)  </p><p><span style="color:rgb(92, 92, 92);"><span style="white-space:pre">	</span>6 </span>res19: Int = <span style="color:rgb(192, 0, 0);">11</span> </p>

		def add(more: Int) = (x: Int) => x + more
		val a = add(1)
		val b = add(9999)
		println(a(10))
		println(b(10))

   依照这个函数文本在运行时创建的函数值(对象)被称为闭包:closure。名称源自于通过“捕获”自由变量的绑定对函数文本执行的“关闭”行动。

   不带自由变量的函数文本,如(x: Int) => x + 1,被称为封闭术语:closed term,这里术语:term指的是一小部分源代码。因此依照这个函数文本在运行时创建的函数值严格意义上来讲就不是闭包,(x: Int) => x + 1在编写的时候就已经封闭了。

   但任何带有自由变量的函数文本,如(x: Int) => x + more,都是开放术语:open term。因此,任何依照(x: Int) => x + more在运行期创建的函数值将必须捕获它的自由变量,more,的绑定。由于函数值是关闭这个开放术语(x: Int) => x + more的行动的最终产物,得到的函数值将包含一个指向捕获的more变量的参考,因此被称为闭包。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值