嵌套函数的优点和缺点

时间:2015-05-26 06:35:38

标签: r

假设我有一个依赖于另一个函数进行计算的函数,例如

skew_add_list <- function(a, b){

    stopifnot(length(a) == length(b))

    skew_add <- function(a,b){
        a + b + rnorm(n = 1, mean = 0, sd = 1)
    }   

    result_list <- lapply(seq_along(a), function(i) skew_add(a[[i]], b[[i]]))

    return(result_list)
}

现在,skew_add是一个非常具体的功能,仅用于skew_add_list的正文。那么,与将它们拆分相比,将上述代码块中定义的函数保留的优点/缺点是什么,如:

skew_add <- function(a,b){
    a + b + rnorm(n = 1, mean = 0, sd = 1)
}   


skew_add_list <- function(a, b){

    stopifnot(length(a) == length(b))

    result_list <- lapply(seq_along(a), function(i) skew_add(a[[i]], b[[i]]))

    return(result_list)
}

2 个答案:

答案 0 :(得分:2)

声明嵌套功能的一个缺点是,每次你打电话给父母时,它都会在功能环境中创建。功能。这被称为“重新开始”#39;原理。从理论上讲,如果经常调用父函数,它可能会降低性能。但我非常怀疑它在实践中会引人注意。

就个人而言,我更喜欢在这种情况下使用嵌套函数来提高代码可读性并且不会溢出全局环境。

答案 1 :(得分:1)

我同意@ Flame关于表现的评论。但只有当意义计算时间低于代码解析时间时,效果才可见。

在我看来,嵌套函数对于代码可读性非常有用。您可以将具有嵌套函数的函数视为一种“模块”,其中嵌套函数在该模块中有意义。或多或少是面向对象的方法,但只使用静态方法。

因此,简而言之,当您使用仅由f2调用的函数f1,并且只在f1的上下文中有意义时,嵌套f2f1内。

同样,只有一个意见......