根据我的教授,闭合是功能编程语言中功能的值。但是,当我搜索过它时,我看到了另一个定义:
即使在父函数关闭后,闭合是具有访问父范围的函数。
。
哪一个是正确的?
您在网上发现的定义是正确的。
这是一些伪代码:
i = 1
def foo(j: Int) = {
k = 2
return i + j + k
}
foo(42) // returns 45; value of "i" is preserved inside the function
函数foo
添加变量i
,j
和k
的值。变量j
是一个函数参数,可变k
是函数正文内定义的局部变量。但是变量i
来自"外部",称为a free变量。
闭合是"关闭"一个或多个免费变量的任何函数。一旦函数完成,就不再需要本地变量和函数参数,这意味着可以弹出函数保留其变量的整个堆栈帧。但是拥有一个自由变量意味着需要将堆栈框架保存在RAM中以备将来使用。
在某些语言中,更改自由变量的值不会影响相应封闭的本地记忆状态,而在其他语言中,更改是可见的。使用较早的i
和foo
:
// some languages, e.g. Javascript:
foo(42) // 45
i = 2
foo(42) // 45
// other languages, e.g. Scala:
foo(42) // 45
i = 2
foo(42) // 46
我不知道您的老师对"功能的价值"的含义。在功能编程中,函数被称为"头等公民",这意味着每个函数都是一个值(可以将其作为函数参数,从函数返回,保存在集合中等(。