如何覆盖R中的变量查找?

时间:2014-02-28 23:09:19

标签: r variables ipc scoping

是否有可能重新定义R如何查找变量?

具体来说,我有2个R进程:客户端和服务器。我想对服务器进程的变量范围规则进行以下扩展:如果在任何父环境中找不到x,而是查询客户端进程x :< / p>

# i.e. when (in the server process) I write
x

# I actually mean:
if (exists("x")) {
    x
} else {
    getFromClient("x", port = 1234L)
}

这可能吗?

背景

我正在做一点IPC工作,客户端进程可以向服务器进程发出命令来执行。但是,命令不可避免地对数据(驻留在客户端)进行操作,我当前不得不手动硬编码需要从客户端导出到服务器的每个变量。

我也不喜欢简单地导出我的客户端进程的整个全局环境,其中可能包含大量冗余数据,这些数据对于处理手头的命令无用。

服务器只需要在需要变量时从客户端查询任何变量就好了。

1 个答案:

答案 0 :(得分:1)

这对我来说非常懒惰和危险,我建议反对它。

服务器代码应该知道它需要从客户端获取哪些变量,并且应该明确地获取这些变量而不是等待尝试捕获“未定义变量”错误。

如果服务器代码试图获取x$foo,其中x是服务器上的列表但没有$foo元素,该怎么办?如何分配不存在的对象?错别字怎么样?

变量诞生的每个程序中应该只有一个点,此时你应该用一个值定义它或者从服务器获取它的值 - 没有必要试着对它懒惰。

您冒险编写仅在客户端 - 服务器环境中运行的代码,因此难以测试。