3

对于 Ruby 项目,我需要一个 OpenCPU 服务器来处理 R 包的一些统计信息。OpenCPU 有一个 JSON REST API,所以使用 Ruby,我可以轻松地与它挂钩以与 R 进行通信。到目前为止,一切都很好。

其中一个包有一个奇怪的(至少对我来说)语法。

add <- function(.argument1, .argument2) {
  return(.argument1 + .argument2)
}

所以这只是一个例子,而不是实际的功能。我发现奇怪的部分是参数前面的那些点。当我建议删除这些点时,该软件包的开发人员说它是为了隐藏 IDE (R-Studio) 中的变量概述中的变量。在我看来,他想将参数(我们称之为私有的)设置为私有,或者至少以某种方式对其进行限定。我搜索了互联网以解释 R 的此功能,但一无所获。

实际问题是:我们使用 Ruby,Ruby 将数据转换成 JSON 并发送到 OpenCPU。OpenCPU 查找正确的包/函数,传递参数并执行它。然后它返回到做出 JSON 响应的 OpenCPU。我们更喜欢使用的 Ruby >1.9 Hash 语法如下所示:

{ argument1: 4, argument2: 3 }.to_json
# => { "argument1": 4, "argument2": 3 }

而不是包参数强制的旧:

{ ".argument1" => 4, ".argument2" => 3 }.to_json
# => { ".argument1": 4, ".argument2": 3 }

因此,在绝望地寻找一个论点来说服 R 开发人员不要使用这些点时,我的问题仍然没有得到解答:参数前面的这一点在 R 中是否具有真正的功能,或者只是将变量排除在外IDE?

4

1 回答 1

2

我想你会发现原因来自lsR 中函数的默认行为,它不返回以点开头的对象。这可以通过all.names参数修改:

all.names一个逻辑值。如果为 TRUE,则返回所有对象名称。如果为 FALSE,则以 . 开头的名称。被省略。

以这种方式“隐藏”更多技术功能或变量是很常见的,例如.Machine, .Options, .Fortran,.dynLibs

于 2014-04-25T11:17:33.333 回答