在R中使用没有括号的返回

时间:2015-09-21 21:46:13

标签: r

我刚刚在我写过的一些R代码中找到了一个愚蠢的错误。这个错误等同于:

brokenEarlyReturn = function(x=TRUE) {
    if (x) return   # broken with bare return
    stop("Should not get here if x is TRUE. x == ", x)
}

brokenEarlyReturn(TRUE)
# Error in brokenEarlyReturn(TRUE) : 
#    Should not get here if x is TRUE. x == TRUE

问题在于,我没有return()而只有return而没有以下括号。这导致if语句大致等于if (x) constant,其中正文是不执行任何操作的裸字。在这种情况下,裸字是return函数本身的定义,函数继续而不是返回。正确的版本如下所示:

workingEarlyReturn = function(x=TRUE) {
    if (x) return()   # parentheses added to return
    stop("Should not get here if x is TRUE. x == ", x)
}

返回后R需要括号是有意义的,但作为C程序员,我偶尔会忘记添加它们。如果省略它们通常会出现解析错误,但在if语句正文中没有返回的情况下。

假设我希望能够在函数顶部放置一个“guard”语句,如果某个条件不满足将返回没有值的函数,我将来如何避免出现此错误?或者至少,当我做这个错误时,如何更容易追踪这个错误?是否有一些“表达没有效果”警告我可以打开?

0 个答案:

没有答案