有4个独立的函数,用于开始,结束,获取它们的持续时间,并以降序显示它们的结果,这需要使用闭包来实现。我首先尝试实现三个函数:
StopWatch <- function(){
list(strt<-function(Name = "name") Start <<- Sys.time(),
stop<-function() End <<- Sys.time(),
duration<-function(){ t <<- Start- End
print(t)})
}w<- StopWatch()
w$strt("player1")
sleep_for_a_minute()
w$stop()
w$duration()当我运行w$strt("player1")时,它给出一个错误:尝试应用非函数
发布于 2019-11-09 22:16:52
您在函数中创建的列表未命名。通过运行names(w)进行检查。您应该使用=而不是<-
发布于 2019-11-09 23:00:26
因为@Tyler Smith已经wrote了,所以您需要=,因为您希望在这里为list元素指定名称,而不是真正定义函数。此外,您还试图重写t()函数(在此示例中会产生错误),请使用不同的方法。
StopWatch <- function() {
list(strt=function(Name = "name") Start <<- Sys.time(),
stop=function() End <<- Sys.time(),
duration=function() {
tm <<- Start - End
print(tm)
})
}
w <- StopWatch()
w$strt("player1")
Sys.sleep(1)
w$stop()
w$duration()
# Time difference of -2.27513 secshttps://stackoverflow.com/questions/58779985
复制相似问题