xia*_*dai 9 recursion overloading r
只是为了好玩,我试图-在R中重载以便运行
some.string - n
Run Code Online (Sandbox Code Playgroud)
将删除最后n个字符的some.string.
这是我在R中的代码
`-` <- function(x,y) {
minus <- force(`-`)
if(typeof(x) == "character" & y >0) {
return(substr(x,1,minus(nchar(x), as.integer(y))))
} else {
return(minus(x,y))
}
}
"abc" - 2
Run Code Online (Sandbox Code Playgroud)
然而,这似乎导致无限嵌套的递归.这是因为每次减去运行它都会尝试自行运行.但这正是我试图通过首先分配minus =来防止的-?
我如何避免这种无休止的递归?
sha*_*dow 12
您可以使用.Primitive("-")以避免无限循环.这应该工作:
`-` <- function(x,y) {
if(typeof(x) == "character" & y >0) {
return(substr(x, 1, nchar(x) - as.integer(y)))
} else {
.Primitive("-")(x, y)
}
}
Run Code Online (Sandbox Code Playgroud)
更接近您最初的想法是定义minus <- get("-", envir=baseenv()):
`-` <- function(x,y) {
minus <- get("-", envir=baseenv())
if(typeof(x) == "character" & y >0) {
return(substr(x,1,minus(nchar(x), as.integer(y))))
} else {
return(minus(x,y))
}
}
Run Code Online (Sandbox Code Playgroud)