[//000000001]: # (lazyset \- Lazy evaluation for variables and arrays)
[//000000002]: # (Generated from file 'lazyset\.man' by tcllib/doctools with format 'markdown')
[//000000003]: # (Copyright © 2018 Roy Keene)
[//000000004]: # (lazyset\(n\) 1 tcllib "Lazy evaluation for variables and arrays")
[ Main Table Of Contents | Table Of Contents | Keyword Index | Categories | Modules | Applications ]
# NAME
lazyset \- Lazy evaluation
# Table Of Contents
- [Table Of Contents](#toc)
- [Synopsis](#synopsis)
- [Description](#section1)
- [COMMANDS](#section2)
- [EXAMPLES](#section3)
- [AUTHORS](#section4)
- [Bugs, Ideas, Feedback](#section5)
- [Category](#category)
- [Copyright](#copyright)
# SYNOPSIS
package require Tcl 8\.5
package require lazyset ?1?
[__::lazyset::variable__ ?*\-array boolean*? ?*\-appendArgs boolean*? *variableName* *commandPrefix*](#1)
# 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 boolean* is specified as true, then
the variable specified as *variableName* 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 *commandPrefix*\. If *\-array
boolean* is specified as true, then 2 arguments 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 output 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 © 2018 Roy Keene