支持词法嵌套函数的众所周知的语言包括:
基于ALGOL的语言,如ALGOL 68,Simula,Pascal,Modula-2,Modula-3,Oberon和Ada.
现代版本的Lisp(带有词法范围),如Scheme和Common Lisp.
ECMA脚本(JavaScript和ActionScript).
Scala全力支持
脚本语言中的各种程度的支持,例如Ruby,Python和Perl(从版本6开始).
还有一种带有嵌套函数的C语言,D语言.
GCC还支持C语言中的嵌套函数,作为语言扩展.1
从Fortran-90开始,Fortran支持一级嵌套(CONTAINed)子例程和函数.
在您的情况下,功能s
将只在其中可用t
.
嵌套函数是在另一个函数内定义的函数.(GNU C++不支持嵌套函数.)嵌套函数的名称是定义它的块的本地名称.例如,这里我们定义一个名为square的嵌套函数,并调用它两次:
foo (double a, double b) { double square (double z) { return z * z; } return square (a) + square (b); }
嵌套函数可以访问在其定义点可见的包含函数的所有变量.这称为词汇范围.例如,这里我们展示了一个嵌套函数,它使用一个名为offset的继承变量:
bar (int *array, int offset, int size) { int access (int *array, int index) { return array[index + offset]; } int i; /* ... */ for (i = 0; i < size; i++) /* ... */ access (array, i) /* ... */ }
在允许变量定义的地方的函数内允许嵌套函数定义; 也就是说,在任何块中,与块中的其他声明和语句混合.
请参阅"嵌套函数 - 使用GNU编译器集合(GCC)"
支持词法嵌套函数的众所周知的语言包括:
基于ALGOL的语言,如ALGOL 68,Simula,Pascal,Modula-2,Modula-3,Oberon和Ada.
现代版本的Lisp(带有词法范围),如Scheme和Common Lisp.
ECMA脚本(JavaScript和ActionScript).
Scala全力支持
脚本语言中的各种程度的支持,例如Ruby,Python和Perl(从版本6开始).
还有一种带有嵌套函数的C语言,D语言.
GCC还支持C语言中的嵌套函数,作为语言扩展.1
从Fortran-90开始,Fortran支持一级嵌套(CONTAINed)子例程和函数.
在您的情况下,功能s
将只在其中可用t
.
嵌套函数是在另一个函数内定义的函数.(GNU C++不支持嵌套函数.)嵌套函数的名称是定义它的块的本地名称.例如,这里我们定义一个名为square的嵌套函数,并调用它两次:
foo (double a, double b) { double square (double z) { return z * z; } return square (a) + square (b); }
嵌套函数可以访问在其定义点可见的包含函数的所有变量.这称为词汇范围.例如,这里我们展示了一个嵌套函数,它使用一个名为offset的继承变量:
bar (int *array, int offset, int size) { int access (int *array, int index) { return array[index + offset]; } int i; /* ... */ for (i = 0; i < size; i++) /* ... */ access (array, i) /* ... */ }
在允许变量定义的地方的函数内允许嵌套函数定义; 也就是说,在任何块中,与块中的其他声明和语句混合.
请参阅"嵌套函数 - 使用GNU编译器集合(GCC)"