所以Squeak/Pharo支持Traits和Newspeak有Mixins.有什么不同?特质没有instVars但是Mixins有吗?
是否存在以不扩展到封闭函数的方式定义范围的语言?换句话说,有一种语言,其中的代码如下(类似Python的语法):
>>> x = 3
>>> def fact(n):
... print x
... return reduce(lambda u, v: u*v, xrange(1, n+1), 1)
...
Run Code Online (Sandbox Code Playgroud)
会产生错误,因为x未在函数内定义fact?
通常,是否存在任何函数的范围不包含其中定义的函数的语言?
编辑:感谢您提供的信息.我之所以想到这一点,是因为内部函数能够访问其包含函数所提供的所有环境的情况听起来非常接近我对Joe Armstrong在他反对OOP的论证中描述的情况:
因为面向对象语言的问题是他们已经拥有了所有这些隐含的环境.你想要一个香蕉,但你得到的是一只拿着香蕉和整个丛林的大猩猩.
另外相关的是,我听说新语言没有全局命名空间,但我不知道它是如何工作的.
我可以想象在下面的Brian的评论中提出的内置函数(从__builtins__Pythonspeak或System中导入的函数在许多其他语言中)的问题是由解释器/编译器在每个函数中人为引入的.毕竟他们几乎总是特别用语言对待.另一种选择是将它们作为对象的方法作为参数传递给函数或从内部作为模块导入.
在学习Smalltalk时,我看到了3个不同的VM.他们是Squeak/Pharo/Newspeak.他们之间有什么区别?