implementing closures (ch25)

This commit is contained in:
2024-08-29 10:54:03 +02:00
parent 7ed6cf6dcc
commit 53d5cca124
12 changed files with 376 additions and 33 deletions

View File

@ -0,0 +1,13 @@
// this program should print "outer"; without proper closure support, it shows "global".
var x = "global";
fun outer() {
var x = "outer";
fun inner() {
print x;
}
inner();
}
outer();

View File

@ -0,0 +1,22 @@
fun makeClosure() {
var local = "local";
fun closure() {
print local;
}
return closure;
}
var closure = makeClosure();
closure();
fun makeClosure2(value) {
fun closure() {
print value;
}
return closure;
}
var doughnut = makeClosure("doughnut");
var bagel = makeClosure("bagel");
doughnut();
bagel();

View File

@ -0,0 +1,11 @@
fun outer() {
var a = 1;
var b = 2;
fun middle() {
var c = 3;
var d = 4;
fun inner() {
print a + c + b + d;
}
}
}

View File

@ -0,0 +1,8 @@
fun outer() {
var x = "outside";
fun inner() {
print x;
}
inner();
}
outer();

View File

@ -0,0 +1,10 @@
fun outer() {
var x = "outside";
fun inner() {
print x;
}
return inner;
}
var closure = outer();
closure();

View File

@ -0,0 +1,22 @@
var globalSet;
var globalGet;
fun main() {
var a = "initial";
fun set() {
a = "updated";
}
fun get() {
print a;
}
globalSet = set;
globalGet = get;
}
main();
globalSet();
globalGet();