是否有没有全局变量的编程语言?
是否存在以不扩展到封闭函数的方式定义范围的语言?换句话说,有一种语言,其中的代码如下(类似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的评论中提到的内置函数(在Pythonspeak中从__builtins__
导入的函数或在许多其他语言中从System导入的函数)在每个函数中由解释器/编译器人为引入。毕竟他们几乎总是特别用语言对待。另一种选择是将它们作为对象的方法作为参数传递给函数或从内部作为模块导入。
没有找到相关结果
已邀请:
3 个回复
为陡土
你换
在没有全局变量的程序中,你宁愿写下这样的东西:
并且此代码将在以下上下文中执行:
在具有这种方法且没有全局变量的程序中,程序中的函数几乎可以完全与所有东西隔离,除了它们可以通过它们获得的参数访问它们。然后,您还可以为函数创建替代环境,然后在“jails”中运行它们。库和功能就像电路中的电子元件,您需要的地方,但也可以将各个部分连接到您想要的任何部分。设计这种模式的编程语言可能有一些语法糖,以方便自动将隐式“默认”环境传递给函数调用,但您可以始终明确强制它们使用您想要的任何替代环境。 例如,在无全局语言中,如果您有一个用于访问操作系统文件系统或网络中的数据的库,则可以提供备用环境并监视I / O或使库使用您自己的虚拟文件系统或VPN连接,而不是常规文件系统和网络。
拭十年