首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用R中的闭包为5个不同的玩家构建计时器

如何使用R中的闭包为5个不同的玩家构建计时器
EN

Stack Overflow用户
提问于 2019-11-09 21:56:55
回答 2查看 78关注 0票数 1

有4个独立的函数,用于开始,结束,获取它们的持续时间,并以降序显示它们的结果,这需要使用闭包来实现。我首先尝试实现三个函数:

代码语言:javascript
复制
StopWatch <- function(){
 list(strt<-function(Name = "name") Start <<- Sys.time(),
      stop<-function() End <<- Sys.time(),
      duration<-function(){ t <<- Start- End
      print(t)})
}
代码语言:javascript
复制
w<- StopWatch()
w$strt("player1")
sleep_for_a_minute()
w$stop()
w$duration()

当我运行w$strt("player1")时,它给出一个错误:尝试应用非函数

EN

回答 2

Stack Overflow用户

发布于 2019-11-09 22:16:52

您在函数中创建的列表未命名。通过运行names(w)进行检查。您应该使用=而不是<-

票数 2
EN

Stack Overflow用户

发布于 2019-11-09 23:00:26

因为@Tyler Smith已经wrote了,所以您需要=,因为您希望在这里为list元素指定名称,而不是真正定义函数。此外,您还试图重写t()函数(在此示例中会产生错误),请使用不同的方法。

代码语言:javascript
复制
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 secs
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58779985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档