我正在更新一个旧的包,并缩短了一堆非常长的函数名.如何让用户知道旧函数已被弃用?我用roxygen2
来记录所有东西,所以我想知道我是否应该使用#' @alias
?思想?
我正在更新一个旧的包,并缩短了一堆非常长的函数名.如何让用户知道旧函数已被弃用?我用roxygen2
来记录所有东西,所以我想知道我是否应该使用#' @alias
?思想?
尽管您只是在缩短函数名,但我仍然会像对待包的公共API的任何更改一样大张旗鼓地对待它:在引入新函数时,对旧函数进行弃用/失效阶段.
在第一阶段中,对于每个想要缩短名称的函数(我们称之为transmute_my_carefully_crafted_data_structure_into_gold
),保留一个带有该签名的函数,但将所有实际代码移到新命名的函数中(我们称之为alchemy
).
最初:
transmute_my_carefully_crafted_data_structure_into_gold <- function(lead, alpha=NULL, beta=3) {
# TODO: figure out how to create gold
# look like we are doing something
Sys.sleep(10)
return("gold")
}
新名称的首次发布:
transmute_my_carefully_crafted_data_structure_into_gold <- function(lead, alpha=NULL, beta=3) {
.Deprecated("alchemy") #include a package argument, too
alchemy(lead=lead, alpha=alpha, beta=beta)
}
alchemy <- function(lead, alpha=NULL, beta=3) {
# TODO: figure out how to create gold
# look like we are doing something
Sys.sleep(10)
return("gold")
}
因此,transmute_my_carefully_crafted_data_structure_into_gold
开始时是一个围绕alchemy
的薄型包装,再加上一个.Deprecated
调用.
> transmute_my_carefully_crafted_data_structure_into_gold()
[1] "gold"
Warning message:
'transmute_my_carefully_crafted_data_structure_into_gold' is deprecated.
Use 'alchemy' instead.
See help("Deprecated")
> alchemy()
[1] "gold"
如果更改为alchemy
,它仍然由transmute_my_carefully_crafted_data_structure_into_gold
携带,因为它只调用前者.但是,即使alchemy
更改签名,也不会更改transmute_my_carefully_crafted_data_structure_into_gold
的签名;在这种情况下,您需要尽可能地将旧参数映射到新参数中.
在以后的版本中,可以将.Deprecated
更改为.Defunct
.
> transmute_my_carefully_crafted_data_structure_into_gold()
Error: 'transmute_my_carefully_crafted_data_structure_into_gold' is defunct.
Use 'alchemy' instead.
See help("Defunct")
请注意,这是一个错误并停止;它不会直接拨打alchemy
.
在以后的版本中,你可以完全删除这个函数,但我会把它作为路标保留在这个状态.
你提到使用罗克赛根.当您第一次转换为Disprecated时,您可以将@rName更改为package Disprecated,在描述的开头添加一行,表明它已被弃用,并将新函数添加到@seeAllow.当它更改为defunct时,将@rdname更改为package defunct.