您可以在R中使用以下代码创建一个函数,省略return命令后的括号,但return语句的行为不符合预期,似乎什么都不做:
> func <- function(x) { return; print(x) }
> func(1)
[1] 1
包含括号的行为符合预期:
> func <- function(x) { return(); print(x)}
> func(1)
NULL
为什么呢?没有参数的return语句是否有用,如果没有,为什么它不会导致异常呢?
答案 0 :(得分:2)
我或许可以提供一些见解。除了在R中合法地拥有一个没有参数的函数之外,在没有赋值,函数调用等的行上有一个变量也是合法的。考虑下面的代码片段:
x <- c(1,2,3)
x
print(x)
print
以下是该输出:
[1] 1 2 3
[1] 1 2 3
function (x, ...)
UseMethod("print")
<bytecode: 0xbb87b8>
<environment: namespace:base>
换句话说,从控制台中,变量或函数的默认行为本身就是打印有关该变量或函数的信息。因此,在这种情况下显然存在已定义的行为,并且似乎该函数未被调用。这可能不太有意义,当这种情况发生在另一个函数中时,尽管看起来R似乎已经为此定义了行为。
答案 1 :(得分:1)
function(x) { return(); print(x) }
调用return()
作为函数。 function(x) { return; print(x) }
引用return
作为普通对象。这是区别。
return # Just show the function body.
## .Primitive("return")
return() # Actually call the function.
## Error: no function to return from, jumping to top level