只是为了好玩,我正在尝试重载R中的-
,以便运行
some.string - n
将给我some.string并删除最后n个字符。
这是我在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
但是,这似乎会导致无限嵌套的递归。这是因为每次运行减号时,它都会尝试自行运行。但这恰恰是我试图通过首先分配minus =
-
来防止的事情?如何避免这种无休止的递归?
最佳答案
您可以使用.Primitive("-")
避免无限循环。这应该工作:
`-` <- function(x,y) {
if(typeof(x) == "character" & y >0) {
return(substr(x, 1, nchar(x) - as.integer(y)))
} else {
.Primitive("-")(x, y)
}
}
与您的最初想法更接近的是定义
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))
}
}
关于R:如果要在 `-`代码中使用 `-`,如何重载 'overload'运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26032387/