首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用修改后的stop调用获得正确的环境打印输出

如何使用修改后的stop调用获得正确的环境打印输出
EN

Stack Overflow用户
提问于 2019-03-20 04:02:46
回答 1查看 21关注 0票数 1

我正试着聪明地写一个"stopcat“函数,它本质上是stop的简写( sprintf( "a string thing %d",val ))

下面是一小段无法工作的代码片段

代码语言:javascript
复制
library( tidyverse ) # For !!
stopcat = function( str, ... ) {
  msg = sprintf( str, ... )
  eval( expr( stop( !!msg ) ), parent.frame(1) )
}

pig = function() {
  cat( "piggy\n" )
  stopcat( "no way! %d", 6 )
  24 * 44
}
pig()

它会打印出来

代码语言:javascript
复制
 Error in eval(expr(stop(!!msg)), parent.frame(1)) : no way! 6 

但我想

代码语言:javascript
复制
 Error in pig : no way! 6 

有什么想法吗?

我找到了相关的帖子How to get the name of the calling function inside the called routine?,但那里的细节似乎不适用于停止(或者我不能理解说了什么,也许)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-20 04:26:49

我不认为您可以通过这样操作计算上下文来愚弄stop。如果确实需要识别该函数,可以尝试获取函数名称并将其添加到错误消息中,然后关闭默认表达式标签。例如

代码语言:javascript
复制
stopcat <- function( str, ... ) {
  msg <- sprintf( str, ... )
  fun <- deparse(sys.call(1)[[1]])
  msg <- paste0("(in ", fun, "): ", msg)
  stop( msg, call.=FALSE)
}

pig <- function() {
  cat( "piggy\n" )
  stopcat( "no way! %d", 6 )
  24 * 44
}
pig()
# piggy
#  Error: (in pig): no way! 6 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55249143

复制
相关文章

相似问题

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