函数 / 嵌套 / 编程语言 · 2023年 10月 15日 0

嵌套

74 次浏览

从前有座山,山里有座庙,庙里有个老和尚,他在讲故事。讲的是,"从前有座山,山里有座庙......"。

函数嵌套调用

  • 主流编程语言基本没有不支持函数嵌套调用的,从生成机器码或者中间代码而言,这没什么难度。
    C/ObjC/C++/Java/C#/Python/JS/Go/Rust/Swift/仓颉/VB/Kotlin 等等都支持。

支持函数定义嵌套的语言

  • C语言不允许定义嵌套,但允许调用嵌套(包括递归或非递归),GNU C通过Trampoline实现函数嵌套功能,它是存在于栈上的可执行代码,由运行时动态生成。
  • C++11前不允许函数嵌套定义,C++11之后引入lambda表达式,允许在函数内部定义匿名函数,类似于函数定义嵌套。
  • Java没有显式函数嵌套定义,但支持函数内部Lambda表达式。
  • C#/Python/JS/Ruby/Swift/Kotlin/仓颉 等现代编程语言都支持函数嵌套定义。
  • Go/Rust 支持函数内定义匿名函数来支持函数定义嵌套。
  • Kotlin 函数内部的函数定义又被称为局部函数。

嵌套类

  • C++/Java/C#/Python/Kotlin 都有嵌套类。
  • Kotlin 嵌套在类内部被称为嵌套类,不能访问访问外部类成员,这和Java不同。Kotlin嵌套类前加inner修饰就变成了内部类,此时可以访问外部类成员。

访问嵌套类

  • Kotlin 访问内部类,需要先实例化外部类,再实例化内部类。

静态内部类

  • Java 内部类加static修饰就变成静态内部类。