当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R bindenv 绑定和环境锁定、主动绑定


R语言 bindenv 位于 base 包(package)。

说明

这些函数代表用于调整环境和环境内绑定的接口。它们允许锁定环境以及单独的绑定,以及将变量链接到函数。

用法

lockEnvironment(env, bindings = FALSE)
environmentIsLocked(env)
lockBinding(sym, env)
unlockBinding(sym, env)
bindingIsLocked(sym, env)

makeActiveBinding(sym, fun, env)
bindingIsActive(sym, env)
activeBindingFunction(sym, env)

参数

env

一个环境。

bindings

逻辑指定是否应锁定绑定。

sym

名称对象或字符串。

fun

带有零个或一个参数的函数。

细节

函数 lockEnvironment 锁定其环境参数。锁定环境可以防止在环境中添加或删除变量绑定。除非绑定已被锁定,否则仍然可以更改变量的值。具有命名空间的包的命名空间环境在加载时被锁定。

lockBinding 锁定指定环境中的各个绑定。锁定绑定的值无法更改。除非环境被锁定,否则可以从环境中删除锁定的绑定。

makeActiveBinding安装fun在环境中env从而得到的值sym调用fun不带参数,并分配给sym调用fun带有一个参数,即要分配的值。这允许实现诸如链接到的 C 变量之类的东西R变量和链接到数据库的变量,用于实现setRefClass。它对于制作某些系统全局变量的线程安全版本也可能很有用。当前活动绑定在软件包安装过程中不会保留,但可以在以下位置创建:.onLoad.

bindingIsLockedenvironmentIsLocked 返回长度为 1 的逻辑向量。其余函数不可见地返回 NULL

例子

# locking environments
e <- new.env()
assign("x", 1, envir = e)
get("x", envir = e)
lockEnvironment(e)
get("x", envir = e)
assign("x", 2, envir = e)
try(assign("y", 2, envir = e)) # error

# locking bindings
e <- new.env()
assign("x", 1, envir = e)
get("x", envir = e)
lockBinding("x", e)
try(assign("x", 2, envir = e)) # error
unlockBinding("x", e)
assign("x", 2, envir = e)
get("x", envir = e)

# active bindings
f <- local( {
    x <- 1
    function(v) {
       if (missing(v))
           cat("get\n")
       else {
           cat("set\n")
           x <<- v
       }
       x
    }
})
makeActiveBinding("fred", f, .GlobalEnv)
bindingIsActive("fred", .GlobalEnv)
fred
fred <- 2
fred

作者

Luke Tierney

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Binding and Environment Locking, Active Bindings。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。