Определение языка R. Версия 3.5.2 (2018-12-20) DRAFT. Александр Александрович Фоменко
также сохранен обещанием. Функция замены извлечет контент слота выражения, что позволяет программисту получать доступ или к значению или к выражению, присоединенному с обещанием.
В пределах языка R объекты обещания видимы почти неявно: фактические аргументы функции имеют этот тип. Есть также функция delayedAssign, которая сделает обещание из выражения. Отсутствует какой-либо способ в коде R для проверки, является ли объект обещанием или нет, и при этом нет способа использовать код R для определения окружающей среды обещания.
2.1.10. Точка-точка-точка
Тип объекта «…» хранится как тип pairlist. К компонентам «…» можно получить доступ обычным pairlist способом из кода C, но не легко получить доступ как к объекту в интерпретируемом коде. Объект может быть получен как список, так, например, в таблице ниже:
args <– list (…)
##…
for (a in args) {
##…
Если функция имеет «…» в качестве формального аргумента, который не соответствует формальным аргументам, то им сопоставляется «…».
2.1.11. Окружающая среда
Будем считать, что окружающие среды могут состоять из двух частей. Фрейм, состоящий из набора пар символ-значение, и обертка — указатель на обертку окружающей среды. Когда R ищет значение для символа, исследуется фрейм и, если соответствующий символ будет найден, его значение будет возвращено. В противном случае получают доступ к обертке окружающей среды, и процесс повторяется. Окружающие среды формируют древовидную структуру, в которой обертки играют роль родителей. Дерево окружающих сред имеет корень в пустой окружающей среде, доступной через emptyenv (), у которой нет родителя. Корень – прямой родитель окружающей среды основного (base) пакета (доступной через функцию baseenv ()). Прежде у baseenv () было специальное значение NULL, но начиная с версии 2.4.0 использование NULL, является не допустимым в качестве окружающей среды.
Окружающие среды создаются неявно вызовами функции, как описано в разделе 2.1.5 [Объекты функции], и разделе 3.5.2 [Лексическая окружающая среда]. В этом случае окружающая среда содержит переменные, локальные для функции (включая аргументы), а ее обертка является окружающей средой вызванной в настоящий момент функции. Окружающие среды также можно создать непосредственно new. env. К контенту фрейма окружающей среды можно получить доступ и манипулирование при помощи ls, get и assign, включая eval и evalq.
Может использоваться функция parent. env для получения доступа к обертке окружающей среды.
В отличие от большинства других объектов R, окружающая среда не копируется при передаче в функцию или использовании в присвоениях. Таким образом, если присвоить одну и ту же окружающую среду нескольким символам и изменить одну из них, то другие изменятся также. В частности присвоение атрибутов окружающей среде может привести к неожиданностям.
2.1.12. Объекты парных списков
Объекты парных списков (Pairlist) подобны спискам точечной пары Lisp. Они интенсивно