【问题标题】:Trace function which is declared inside another function在另一个函数中声明的跟踪函数
【发布时间】:2015-07-15 14:16:18
【问题描述】:

我有以下代码:

abc <- function() {
    def <- function() { }
    def_enter <- function() { print("def_enter") }
    def_exit <- function() { print("def_exit") }
    trace(def, def_enter, exit = def_exit)
    def()
}

abc_enter <- function() { print("abc_enter") }
abc_exit <- function() { print("abc_exit") }

trace(abc, abc_enter, exit = abc_exit)

abc()

我希望输出是这样的:

> abc()
Tracing abc() on entry 
[1] "abc_enter"
Tracing def() on entry
[1] "def_enter"
Tracing def() on exit
[1] "def_exit"
Tracing abc() on exit 
[1] "abc_exit"
NULL

但是得到这样的输出:

> abc()
Tracing abc() on entry 
[1] "abc_enter"
Tracing function "def" in package "base"
Tracing abc() on exit 
[1] "abc_exit"
NULL

是否有可能得到我期望的输出?如何修复上面的代码?

【问题讨论】:

    标签: r trace


    【解决方案1】:

    您需要指定调用trace 中的函数的环境。 只需在abc的定义中trace的参数where中提及即可:

    abc <- function() {
        def <- function() { }
        def_enter <- function() { print("def_enter") }
        def_exit <- function() { print("def_exit") }
        trace(def, def_enter, exit = def_exit, where=environment())
        def()
    }
    

    并且通过调用abc,你会得到预期的结果:

    #>abc()
    #Tracing abc() on entry 
    #[1] "abc_enter"
    #Tracing function "def" in package ".GlobalEnv"
    #Tracing def() on entry 
    #[1] "def_enter"
    #Tracing def() on exit 
    #[1] "def_exit"
    #Tracing abc() on exit 
    #[1] "abc_exit"
    #NULL
    

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 2011-12-02
      相关资源
      最近更新 更多