Мы можем использовать purrr::partial
для создания частичных функций:
f <- function(x, y) {
print(x)
print(y)
return(invisible())
}
ff <- purrr::partial(f, y = 1)
ff(2)
#> [1] 2
#> [1] 1
Создано в 2020-02-19 пакетом Представить (v0.3.0)
Это часто может быть весьма полезным, но имеет неприятный побочный эффект, заключающийся в том, что частичная функция теряет свою сигнатуру, которая заменяется элипсисом:
ff
#> <partialised>
#> function (...)
#> f(y = 1, ...)
Хотя это не имеет никакого отношения к программированию, приводит к ухудшению читаемости кода во время разработки, когда «intellisense» RStudio больше не может помочь нам запомнить имена и / или порядок аргументов. Так есть ли какие-то другие средства частичной обработки, которые сохраняют исходную подпись (за вычетом аргументов частичного удаления), как показано ниже?
ff
#> <partialised>
#> function (x)
#> f(y = 1, x)
Теперь, очевидно, это можно сделать вручную, определив новую функцию ff
который является просто оберткой вокруг f
с желаемыми аргументами.
ff <- function(x) f(x, y = 1)
Но это означает, что любые модификации подписи f
должны быть реплицированы в ff
. Так есть ли «более чистый» способ частичного сохранения подписи?