Skip to content

Share captured mutable state across closures

Share captured mutable state across closures

Section titled “Share captured mutable state across closures”

Canonical source: protos/examples/closures/shared-captured-state.protos at locked revision e99b712ecf658a527b1fe82c8beba2c1286d8dc9.

This executable example is rendered from the exact Protos source consumed by the website. Its program body is copied without modification.

/*
* THE LICENSED WORK IS PROVIDED UNDER THE TERMS OF THE ADAPTIVE PUBLIC LICENSE ("LICENSE") AS FIRST COMPLETED BY: Guillermo Adrián Molina. ANY USE, PUBLIC DISPLAY, PUBLIC PERFORMANCE, REPRODUCTION OR DISTRIBUTION OF, OR PREPARATION OF DERIVATIVE WORKS BASED ON, THE LICENSED WORK CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS LICENSE AND ITS TERMS, WHETHER OR NOT SUCH RECIPIENT READS THE TERMS OF THE LICENSE. "LICENSED WORK" AND "RECIPIENT" ARE DEFINED IN THE LICENSE. A COPY OF THE LICENSE IS LOCATED IN THE TEXT FILE ENTITLED "LICENSE.TXT" ACCOMPANYING THE CONTENTS OF THIS FILE. IF A COPY OF THE LICENSE DOES NOT ACCOMPANY THIS FILE, A COPY OF THE LICENSE MAY ALSO BE OBTAINED AT THE FOLLOWING WEB SITE: https://github.com/guillermomolina/protos
*
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.
*/
// Multiple escaping closures can share one captured lexical binding by
// reference. Mutation through either closure is visible to the other.
makeCounter: () => {
count: 0
{
increment: () => {
count = count + 1
count
}
current: () => { count }
}
}
counter: makeCounter()
counter.increment()
counter.increment()
print(counter.current())

← Previous example · Task catalog · Next example →