В R я заметил, что дерево синтаксического анализа оператора function
кажется избыточным в том смысле, что его четвертый элемент, по-видимому, всегда состоит из первых трех элементов.
Например,
> as.list(substitute(function(x = 1){x^2}))
[[1]]
`function`
[[2]]
[[2]]$x
[1] 1
[[3]]
{
x^2
}
[[4]]
function(x = 1){x^2}
Одна вещь, которую я заметил, заключалась в том, что четвертый элемент хранит формат, в котором была введена функция.
> as.list(substitute(function(x = 1){
+ x^2})[[4]]
function(x = 1){
x^2}
Какова цель этого четвертого элемента в дереве синтаксического анализа? Единственный раз, когда я вижу, что он используется, - это если вы хотите распечатать функцию дословно, что вы уже можете сделать, напечатав функцию, например.
> f = function(x = 1){
+ x^2}
> f
function(x = 1){
x^2}
s <- substitute(function(x=1){ ## a comment; x^2})
(разбивая строку точкой с запятой), тоstr(s[[4]])
показывает, что это объектsrcref
. Методы для классаsrcref
выглядят поистине загадочными... (документация: stat.ethz.ch/R-manual/R-patched/library/base/html/srcfile.html ) - person Ben Bolker   schedule 12.06.2013as.list
для четвертого элемента, хотя я понятия не имею, что представляет собой результирующий список. - person Jon Claus   schedule 12.06.2013options(keep.source=FALSE); as.list(substitute(function(x = 1){x^2}))
. (Или просто проверьте класс четвертого элемента!) - person Josh O'Brien   schedule 12.06.2013as.list(s[[4]])
описано в?srcfile
:c(first_line, first_byte, last_line, last_byte, first_column, last_column, first_parsed, last_parsed)
в отношении индексов низкоуровневого объекта, представляющего исходный код. - person Ben Bolker   schedule 12.06.2013