Существуют ли языки, в которых область действия определена таким образом, что не распространяется на вложенные функции? Другими словами, существует ли язык, на котором следующий код (синтаксис, подобный Python):
>>> x = 3
>>> def fact(n):
... print x
... return reduce(lambda u, v: u*v, xrange(1, n+1), 1)
...
выдаст ошибку, потому что x не определен внутри функции fact
?
В общем случае есть ли языки, в которых объем любой функции не будет включать в себя функции, определенные в нем?
Изменить : Спасибо за информативные комментарии. объектно-ориентированные языки - это они получил всю эту неявную среду, которая они носят с собой. Вы хотел банан, но у тебя был горилла держит банан и целые джунгли.
Также важно то, что я слышал, что язык новояз не имеет глобального пространства имен, хотя я понятия не имею, как это работает.
Я могу представить себе проблему, поднятую в Комментарий Брайана о встроенных функциях (функции, импортированные из __ builtins __
в Pythonspeak или System на многих других языках) искусственно вводятся интерпретатором / компилятором в каждую функцию. В конце концов, к ним почти всегда обращаются специально на языке. Другой вариант - использовать их как методы объекта, передаваемые в качестве параметра функции или импортированные как модуль изнутри.