是否存在以不扩展到封闭函数的方式定义范围的语言?换句话说,是否有一种语言,其代码如下(类似于 Python 的语法):
>>> x = 3
>>> def fact(n):
... print x
... return reduce(lambda u, v: u*v, xrange(1, n+1), 1)
...
会因为 x 未在函数内部定义而出错fact
?
一般来说,是否存在任何函数的范围不包括其中定义的函数的语言?
编辑:感谢您提供信息丰富的评论。我想到这一点的原因是,内部函数可以访问其包含函数提供的所有环境的情况听起来很接近 Joe Armstrong 在反对 OOP 的论点中描述的情况:
因为面向对象语言的问题在于,它们拥有随身携带的所有这些隐式环境。你想要一根香蕉,但你得到的是一只拿着香蕉和整个丛林的大猩猩。
同样相关的是,我听说新话语言没有全局命名空间,尽管我不知道它是如何工作的。
我可以想象,在下面 Brian 的评论中提出的问题是,解释器/编译器在每个函数中人为地引入了内置函数(从__builtins__
Pythonspeak 或许多其他语言的 System 中导入的函数)。毕竟,他们几乎总是首先在语言中受到特殊对待。另一种选择是将它们作为对象的方法作为参数传递给函数或从内部作为模块导入。