當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。