env_bind_exprs {rlang} | R Documentation |
Bind lazy or active bindings
env_bind_exprs(.env, ..., .eval_env = caller_env()) env_bind_fns(.env, ...)
.env |
An environment or an object bundling an environment,
e.g. a formula, quosure or closure.
This argument is passed to |
... |
Pairs of names and expressions, values or functions. These dots support tidy dots features. |
.eval_env |
The environment where the expressions will be evaluated when the symbols are forced. |
These functions are experimental. Expect API changes.
# env_bind_exprs() assigns expressions lazily: env <- env() env_bind_exprs(env, name = cat("forced!\n")) env$name env$name # You can unquote expressions. Note that quosures are not # supported, only raw expressions: expr <- quote(message("forced!")) env_bind_exprs(env, name = !! expr) env$name # You can create active bindings with env_bind_fns() # Let's create some bindings in the lexical enclosure of `fn`: counter <- 0 # And now a function that increments the counter and returns a # string with the count: fn <- function() { counter <<- counter + 1 paste("my counter:", counter) } # Now we create an active binding in a child of the current # environment: env <- env() env_bind_fns(env, symbol = fn) # `fn` is executed each time `symbol` is evaluated or retrieved: env$symbol env$symbol eval_bare(quote(symbol), env) eval_bare(quote(symbol), env)