roxygen2是否使用“已知前缀”启发式?

时间:2018-06-19 15:08:22

标签: r roxygen2 rd

假设

Roxygen2使用启发式。如果已知句点之前的前缀(mergecut),则该方法为S3方法,否则为(slice),则为常规方法。

问题

此启发式文件是否已记录?更重要的是,有没有办法避免它?我应该能够为函数名称编写任何未使用的标识符,而无需注意前缀,这也意味着将来对于给定软件包的稳定性,我们将不再提供任何保证。我知道“ S3类没有正式定义”(下面引用了最后的小插图),但是将具有正式定义的内容弄乱似乎是荒谬的。此外,将来对软件包的任何修改以使用新软件包都会突然使有必要使现有API无效。

我试图通过在生成NAMESPACE文件后手动编辑该文件来解决此问题,但这有时会与软件包安装混淆(以我尚不了解的方式)。以下实验是该问题的设置。

实验

运行devtools::create("MyPackage")后,输入以下代码

#' @export
merge.apples <- function() {}

#' @export
merge.oranges <- function() {}

#' @export
cut.apples <- function() {}

#' @export
cut.oranges <- function() {}

#' @export
slice.apples <- function() {}

#' @export
slice.oranges <- function() {}

MyPackage/R/somefile.R中。

现在运行devtools::document()(两次)。您会看到内容

# Generated by roxygen2: do not edit by hand

S3method(cut,apples)
S3method(cut,oranges)
S3method(merge,apples)
S3method(merge,oranges)
export(slice.apples)
export(slice.oranges)

已在文件MyPackage/NAMESPACE中生成。换句话说,假设四个功能是S3功能。

从页面上

vignette("namespace", package = "roxygen2") 
vignette("roxygen2", package = "roxygen2") 
vignette("rd", package = "roxygen2") 

现在(大约从2014年开始?)足以在S3方法或普通方法之前编写#' @export,而roxygen2将会确定它是哪个。

0 个答案:

没有答案