Я читаю этот документ (скопированная копия) по оценке дизайна языка программирования R, и я не могу понять конкретный пример лексического охвата (или его отсутствия).
На странице 4 авторы приводят следующий пример использования функции with
:
with(formaldehyde, carb*optden)
Далее они говорят:
Проницательный читатель заметит, что приведенный выше пример столкновения с нашим утверждением, что R лексически охвачено областью. Как это часто бывает, R лексически охвачен до такой степени, что это не так. R является прежде всего динамическим язык с полным отражающим доступом к работающим данным программ и представление. В приведенном выше примере реализация с обходной лексический охват путем рефлексивного манипулирования Окружающая среда. Это достигается комбинацией ленивой оценки, динамической поиск имени и возможность превратить код в текст и обратно:
with.default <- function(env, expr, ...)
eval(substitute(expr),env, enclose=parent.frame())
Функция использует
substitute
для получения необработанного дерева разбора его второй аргумент, затем оценивает его с помощьюeval
в среде составляется путем составления первого аргумента лексически окружающая среда. '...
используется для отбрасывания любых дополнительных Аргументы.
Как использование функции with
в этом случае является нарушением принципов лексического охвата?