什么时候包需要使用:::作为自己的对象

Sym*_*xAU 12 r r-package

考虑这个R包有两个函数,一个是导出的,另一个是内部的

hello.R

#' @export
hello <- function() {
  internalFunctions:::hello_internal()
}
Run Code Online (Sandbox Code Playgroud)

hello_internal.R

hello_internal <- function(x){
    print("hello world")
}
Run Code Online (Sandbox Code Playgroud)

NAMESPACE

# Generated by roxygen2 (4.1.1): do not edit by hand

export(hello)
Run Code Online (Sandbox Code Playgroud)

当检查(devtools::check())时,它返回NOTE

There are ::: calls to the package's namespace in its code. A package
  almost never needs to use ::: for its own objects:
  ‘hello_internal’
Run Code Online (Sandbox Code Playgroud)

鉴于NOTE几乎没有,在什么情况下一个包需要使用:::其自己的对象?


额外

我有一个非常相似的相关问题,我确实需要:::内部函数,但我不知道为什么需要它.希望有一个答案可以解决这个问题.我怀疑解锁环境正在做一些我不期望的事情,因此不得不使用:::内部功能.

如果他们被认为是彼此的重复,我将删除另一个.

had*_*ley 5

在一般情况下你永远不应该这样做.如果以不寻常的方式调用父函数,则可能需要它(例如,您已手动更改其环境,或者您从另一个未附加包的进程调用它).

  • 嗨哈德利,当然,这不是必需的,但为什么它被支票劝阻了?例如,对于手动调试,在代码中编写package ::: internal可能很方便,因此不必手动加载内部.我是否有任何关于包::: internal的代码的缺点? (2认同)