information-hiding - 什么是嵌套函数?他们有什么用?

标签 information-hiding nested-function

我从未使用过嵌套函数,但在多种语言中看到过对它们的引用(以及嵌套类,我认为它们是相关的)。

  • 什么是嵌套函数?
  • 为什么?!?
  • 您可以使用嵌套函数做什么其他任何方式都做不到的事情?
  • 如果没有嵌套函数,您可以用嵌套函数做什么?这很困难或不够优雅?

我假设嵌套函数只是将一切都视为一个对象的产物,如果对象可以包含其他对象,那么它就会随之而来。

嵌套函数是否有作用域(一般来说,我想语言在这方面有所不同)就像函数内的变量有作用域一样吗?

如果您不确定您的答案是否与语言无关,请添加您所引用的语言。

-亚当

最佳答案

嵌套函数的一种流行用法是 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/

相关文章:

Python 内部函数集与非局部函数集

c# - 为什么不是所有字段/属性/方法都是公开的?

oop - 信息隐藏和数据抽象方面的区别?

javascript - 在功能性 React 组件中定义处理程序的正确方法?

javascript - 额外的括号是什么

swift - Swift 中的嵌套函数

postgresql - 带有嵌套函数的 PL/pgSQL 函数名称解析

encapsulation - 抽象VS信息隐藏VS封装

python - 为什么 Python 的 'private' 方法实际上不是私有(private)的?

c - 从模块的外部上下文中正确隐藏函数