lazyset(3tcl) Lazy evaluation for variables and arrays lazyset(3tcl)
______________________________________________________________________________
NAME
lazyset - Lazy evaluation
SYNOPSIS
package require Tcl 8.5
package require lazyset ?1?
::lazyset::variable ?-array boolean? ?-appendArgs boolean? variableName
commandPrefix
______________________________________________________________________________
DESCRIPTION
The lazyset package provides a mechanism for deferring execution of
code until a specific variable or any index of an array is referenced.
COMMANDS
::lazyset::variable ?-array boolean? ?-appendArgs boolean? variableName
commandPrefix
Arrange for the code specified as commandPrefix to be executed
when the variable whose name is specified by variableName is
read for the first time. If the optional argument -array bool-
ean is specified as true, then the variable specified as vari-
ableName is treated as an array and attempting to read any index
of the array causes that index to be set by the commandPrefix as
they are read. If the optional argument -appendArgs boolean is
specified as false, then the variable name and subnames are not
appended to the commandPrefix before it is evaluated. If the
argument -appendArgs boolean is not specified or is specified as
true then 1 or 2 additional arguments are appended to the com-
mandPrefix. If -array boolean is specified as true, then 2 ar-
guments are appended corresponding to the name of the variable
and the index, otherwise 1 argument is appended containing the
name of variable. The commandPrefix code is run in the same
scope as the variable is read.
EXAMPLES
::lazyset::variable page {apply {{name} {
package require http
set token [http::geturl http://www.tcl.tk/]
set data [http::data $token]
return $data
}}}
puts $page
::lazyset::variable -array true page {apply {{name index} {
package require http
set token [http::geturl $index]
set data [http::data $token]
return $data
}}}
puts $page(http://www.tcl.tk/)
::lazyset::variable -appendArgs false simple {
return -level 0 42
}
puts $simple
AUTHORS
Roy Keene
BUGS, IDEAS, FEEDBACK
This document, and the package it describes, will undoubtedly contain
bugs and other problems. Please report such in the category utility of
the Tcllib Trackers [http://core.tcl.tk/tcllib/reportlist]. Please
also report any ideas for enhancements you may have for either package
and/or documentation.
When proposing code changes, please provide unified diffs, i.e the out-
put of diff -u.
Note further that attachments are strongly preferred over inlined
patches. Attachments can be made by going to the Edit form of the
ticket immediately after its creation, and then using the left-most
button in the secondary navigation bar.
CATEGORY
Utility
COPYRIGHT
Copyright (c) 2018 Roy Keene
tcllib 1 lazyset(3tcl)