Круговое определение функции

Я прочитал вопрос о функции аргументы, которые включали функцию formals, и мне не терпелось узнать, как эта функция определена. Я использовал base:::formals, и это дает:

function (fun = sys.function(sys.parent())) 
{
    if (is.character(fun)) 
    fun <- get(fun, mode = "function", envir = parent.frame())
.Internal(formals(fun))
}

Мне непонятно, как это работает, потому что внутри определения функции formals используется функция formals. Это кажется мне парадоксом.


person machine    schedule 06.05.2020    source источник


Ответы (1)


.Internal(formals(fun)) вызывает внутреннюю функцию R, закодированную на C. Просто так случилось, что эта внутренняя функция C также называется formals. Таким образом, он не вызывает одну и ту же функцию, а только внутреннюю функцию, которая является внутренним формальным именем.

cf https://stat.ethz.ch/R-manual/R-devel/library/base/html/Internal.html

person Karl Forner    schedule 16.02.2021