从前有座山,山里有座庙,庙里有个老和尚,他在讲故事。讲的是,"从前有座山,山里有座庙......"。
函数嵌套调用
- 主流编程语言基本没有不支持函数嵌套调用的,从生成机器码或者中间代码而言,这没什么难度。
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修饰就变成静态内部类。