我从未使用过嵌套函数,但在多种语言中看到过对它们的引用(以及嵌套类,我认为它们是相关的)。
- 什么是嵌套函数?
- 为什么?!?
- 您可以使用嵌套函数做什么其他任何方式都做不到的事情?
- 如果没有嵌套函数,您可以用嵌套函数做什么?这很困难或不够优雅?
我假设嵌套函数只是将一切都视为一个对象的产物,如果对象可以包含其他对象,那么它就会随之而来。
嵌套函数是否有作用域(一般来说,我想语言在这方面有所不同)就像函数内的变量有作用域一样吗?
如果您不确定您的答案是否与语言无关,请添加您所引用的语言。
-亚当
最佳答案
嵌套函数的一种流行用法是 closures .在 lexically scoped具有一流函数的语言可以使用函数来存储数据。 Scheme 中的一个简单示例是计数器:
(define (make-counter)
(let ((count 0)) ; used to store the count
(define (counter) ; this is the counter we're creating
(set! count (+ count 1)) ; increment the count
count) ; return the new count
counter)) ; return the new counter function
(define mycounter (make-counter)) ; create a counter called mycounter
(mycounter) ; returns 1
(mycounter) ; returns 2
在这个例子中,我们将函数 counter 嵌套在函数 make-counter 中,通过返回这个内部函数,我们能够访问定义时可用于 counter 的数据。此信息对于 mycounter 的这个实例是私有(private)的——如果我们要创建另一个计数器,它将使用不同的位置来存储内部计数。继续前面的示例:
(define mycounter2 (make-counter))
(mycounter2) ; returns 1
(mycounter) ; returns 3
关于information-hiding - 什么是嵌套函数?他们有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/521103/