是否有語言的範圍被定義爲不擴展到封閉函數的方式?換句話說就是在那裏有像以下的(類Python語法)的代碼的語言:因爲X不是功能fact
內部定義有沒有全局變量的編程語言?
>>> x = 3
>>> def fact(n):
... print x
... return reduce(lambda u, v: u*v, xrange(1, n+1), 1)
...
將給出錯誤?
一般來說,任何函數的作用域的範圍是否會包含其中定義的函數?
編輯:感謝您提供的信息。我想過這樣做的原因是,有機會獲得由它包含的功能所提供的所有環境中的內部函數的情況聽起來耳熟我附近由喬·阿姆斯特朗在他的argument against OOP描述的情況:
因爲問題與 面向對象的語言是他們有 得到所有這些隱含的環境,他們隨身攜帶。你 想要一個香蕉,但你得到的是一個 大猩猩拿着香蕉和 整個叢林。
同樣相關的是,我聽說語言Newspeak沒有全局命名空間,但我不知道它是如何工作的。
我可以想象,在各種函數中,解釋器/編譯器會人爲地引入內置函數(Pythonspeak中的__builtins__
或其他語言中導入的函數)引發的問題。畢竟,他們幾乎總是首先在語言中特別對待。另一種選擇是將它們作爲對象的方法作爲參數傳遞給函數,或從內部作爲模塊導入。
這會完成什麼? – Blindy 2010-11-21 21:20:29
請注意,'print','reduce'和'xrange'也顯示爲從某個外部作用域解析出的標識符。這顯示了爲什麼這很少有用。 – Brian 2010-11-21 21:22:45