Проблема
В R вы можете назначить атрибут следующим образом:
attr(x, "foo") <- "bar"
Я понимаю, что это делает, но я пытаюсь понять, как это утверждение разбивается на болеефундаментальные части языка R.
Мысли
Хотя attr
является функцией, она также является частью грамматики фундаментального языка, поскольку вы не можете сделать это:
t = attr
t(x, "bar") <- "baz" # gives an error
Наиболее похожий синтаксис, который я могу придумать, заключается в PHP, где вы можете назначить, "вызывая" list
"функцию" следующим образом:
list($a, $b) = array(1, 2);
Я понимаю строку вышеиметь следующую грамматику:
list_assignment:
list(<var>...) = <expression>;
Казалось бы, имеет смысл, что в R грамматика определяется аналогично:
attr_assignment:
attr(<var>, <expression>) <- <expression>;
Но вы также можете написать это:
x = `attr<-`(x, "bar", "baz")
Кажется, что для этого потребуется одно из следующих действий:
- Специальная поддержка
`attr<-`(<var>, <expr>, <expr>)
в грамматике - Реальная функция с именем
attr<-
, которая выполняеттак же, как attr(...) <-
под капотом
Резюме
Как это должноs attr
назначение должно рассматриваться с точки зрения более простых элементов языка?Как насчет `attr<-`
?Кроме того, как они реализованы в парсере R?