closure_nested_scope.gravity 610 B

12345678910111213141516171819202122232425262728293031
  1. #unittest {
  2. name: "Closure captures nested scope correctly.";
  3. error: NONE;
  4. result: true;
  5. };
  6. func main() {
  7. var counter = 0;
  8. // Create a closure that captures and modifies outer variable
  9. var increment = func() {
  10. counter += 1;
  11. return counter;
  12. };
  13. var r1 = (increment() == 1);
  14. var r2 = (increment() == 2);
  15. var r3 = (increment() == 3);
  16. var r4 = (counter == 3);
  17. // Closure over loop variable
  18. var funcs = [];
  19. for (var i in 0...2) {
  20. var val = i;
  21. funcs.push(func() { return val; });
  22. }
  23. var r5 = (funcs[0]() == 0);
  24. var r6 = (funcs[2]() == 2);
  25. return r1 and r2 and r3 and r4 and r5 and r6;
  26. }