本篇内容介绍了“scala的闭包怎么理解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
首先给出浪尖理解的定义吧:
「函数」和「函数内部能访问到的变量」(也叫环境)的总和,就是一个闭包。
按照这个定义呢?下面就应该是一个闭包:
var factor = 3
val adder = (i:Int) => i * factor
可能会有同学有疑问:浪尖,这不对啊?我看网上说的闭包构造是:
闭包首先有函数嵌套,内部函数引用外部函数的变量,然后返回的是一个函数。
应该是这个样子的:
object closure {
def main(args: Array[String]): Unit = {
println(makeAdd()(1))
}
def makeAdd() = {
val more = 10
(x: Int) => x + more
}
}
为啥要用函数嵌套?
需要外部函数的作用主要是隐藏变量,限制变量作用的范围。
有些人看到「闭包」这个名字,就一定觉得要用什么包起来才行。其实这是翻译问题,闭包的原文是 Closure,跟「包」没有任何关系。
所以函数套函数只是为了造出一个局部变量,跟闭包无关。
为啥要return函数呢?
很明显,不return函数无法使用闭包~~
那么现在换个脑子吧,我们将more 变成makeAdd的参数,那么就是下面的形式:
def makeAdd(more : Int) = (x: Int) => x + more
“scala的闭包怎么理解”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。