| bindenv | R Documentation |
These functions represent an interface for adjustmentsto environments and bindings within environments. They allow forlocking environments as well as individual bindings, and for linkinga variable to a function.
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 | an environment. |
bindings | logical specifying whether bindings should be locked. |
sym | a name object or character string. |
fun | a function taking zero or one arguments. |
The functionlockEnvironment locks its environment argument.Locking theenvironment prevents adding or removing variable bindings from theenvironment. Changing the value of a variable is still possible unlessthe binding has been locked. The namespace environments of packageswith namespaces are locked when loaded.
lockBinding locks individual bindings in the specifiedenvironment. The value of a locked binding cannot be changed. Lockedbindings may be removed from an environment unless the environment islocked.
makeActiveBinding installsfun in environmentenvso that getting the value ofsym callsfun with noarguments, and assigning tosym callsfun with oneargument, the value to be assigned. This allows the implementation ofthings like C variables linked toR variables and variables linked todatabases, and is used to implementsetRefClass. It mayalso be useful for making thread-safe versions of some system globals.Currently active bindings are not preserved during package installation,but they can be created in.onLoad.
ThebindingIsLocked andenvironmentIsLocked return alength-one logical vector. The remaining functions returnNULL, invisibly.
Luke Tierney
# locking environmentse <- 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 bindingse <- new.env()assign("x", 1, envir = e)get("x", envir = e)lockBinding("x", e)try(assign("x", 2, envir = e)) # errorunlockBinding("x", e)assign("x", 2, envir = e)get("x", envir = e)# active bindingsf <- 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)fredfred <- 2fredAdd the following code to your website.
For more information on customizing the embed code, readEmbedding Snippets.