Когда пакет должен использовать: для своих собственных объектов
Рассмотрим этот пакет R с двумя функциями, один экспортированный и другой внутренний
hello.R
#' @export
hello <- function() {
internalFunctions:::hello_internal()
}
hello_internal.R
hello_internal <- function(x){
print("hello world")
}
NAMESPACE
# Generated by roxygen2 (4.1.1): do not edit by hand
export(hello)
Когда это отмечено (devtools::check()
), он возвращает NOTE
There are ::: calls to the package namespace in its code. A package
almost never needs to use ::: for its own objects:
‘hello_internal’
Вопрос
Учитывая, что NOTE
говорит почти никогда, при каких обстоятельствах будет, пакет должен использовать :::
для своих собственных объектов?
Extra
У меня очень похожий вопрос где мне требуется :::
для внутренней функции, но я не знаю почему требуется. Надеюсь, что ответ на этот вопрос поможет решить эту проблему. У меня есть подозрение, что разблокировка среды делает то, чего я не ожидаю, и, следовательно, нужно использовать :::
для внутренней функции.
Если они считаются дубликатами друг друга, я удалю другой.
Ответы
Ответ 1
Вам никогда не понадобится это в обычных обстоятельствах. Это может потребоваться вам, если вы вызываете родительскую функцию необычным способом (например, вы вручную изменили ее среду или вы вызываете ее из другого процесса, в котором пакет не подключен).