高级:为什么 ?function(){} 在 R 中有效

Yul*_*i S 2 interpreter r

我了解 R 中的一些运算符和函数在使用帮助函数之前需要反引号。但是,我不明白为什么?function(){}也有效。有人对此有任何想法吗?

Moo*_*per 10

让我们看看?使用 {flow} 包的代码中发生了什么,它可以帮助您检查代码所采用的逻辑路径(遵循整行):

flow::flow_run(?function(){}, out = "png")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我们看到,当表达式是一个调用时,我们调用utils:::.helpForCall

让我们看看那里发生了什么,我们不能flow::flow_run直接调用,所以我们调用flow::flow_debugonce设置utils:::.helpForCall?再次调用

flow::flow_debugonce(utils:::.helpForCall, out = "png")
?function(){}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在那里我们看到,当输入是一个调用时,我们utils:::.tryHelp以字符串形式调用函数的名称。function(){}是调用functionutils:::.tryHelp("function")打开帮助文件。


奖金

@rawr 想知道为什么?cars[1]不起作用,我没有深入研究它,但乍一看我们看到代码在哪里采用了不同的路径.helpForCall

flow::flow_debugonce(utils:::.helpForCall, out = "png")
?mtcars[1]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 同样有趣的是 `?x[1]` 计算 `x` 但 `?x[[1]]` 不计算?但这实际上与这个问题没有任何关系哈.. (2认同)