An environment with key
bound to value
; lookups for other keys
are forwarded to next
.
An environment without key
.
An environment without key
. Lookups for other keys
are forwarded to next
.
Concatenate two environments with left-hand side precedence.
An empty environment.
An empty environment. No keys are present.
Retrieve the current definition of a key.
Retrieve the current definition of a key.
NoSuchElementException
when the key is undefined
in the current request-local context.
Tells whether key
is defined in the current request-local
context.
Retrieve the current definition of a key, but only if it is defined in the current request-local context.
Retrieve the current definition of a key if it is defined.
Retrieve the current definition of a key if it is defined.
If it is not defined, orElse
is evaluated and returned.
Bind two keys and values in the scope of fn
.
Bind value
to key
in the scope of fn
.
Clears all bindings in the scope of fn
.
Clears all bindings in the scope of fn
.
For example:
context.let(Key1, "value1") { context.let(Key2, "something else") { context.letClear() { // context.contains(Key1) == false // context.contains(Key2) == false } // context(Key1) == "value1" // context(Key2) == "something else" } }
Unbind the passed-in keys, in the scope of fn
.
A context contains a number of let-delimited bindings. Bindings are indexed by type Key[A] in a typesafe manner. Later bindings shadow earlier ones.
Note that the implementation of context maintains all bindings in a linked list; context lookup requires a linear search.