.call
函数中stop
参数的用途是什么?
帮助页面(stop
)说明了:
呼叫。 logical,表示调用是否应成为错误消息的一部分。
有人可以用一个直观的例子解释.call
参数吗?
由于
答案 0 :(得分:6)
亲自尝试一下:
f = function () stop('foo')
g = function () stop('bar', call. = FALSE)
f() # Error in f(): foo
g() # Error: bar
...并比较输出。这是唯一的区别。
参数的使用是指您希望隐藏最终用户的不相关细节,否则这些细节会淹没实际的错误消息或积极误导。
例如,I have a package包含以下函数 1 :
#' @export
import = function (module, ...) {
# … some code here …
module_path = find_module(module)
# … more code here …
}
find_module = function (module) {
# … some code here …
if (no_module_found)
stop('Unable to load module ', module, '.', call. = FALSE)
}
现在,您可以看到函数import
是从包中导出的,但函数find_module
不是。因此,用户不知道这个功能,不应该知道:它是一个不相关的实现细节。如果我没有在上面的call. = FALSE
中指定stop
,那么错误消息将包含对此隐藏函数的引用,这会使包的用户感到困惑。
1 这是一个小谎言,代码现在不同了;但实际上的包的早期版本包含此代码。