| // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'package:expect/expect.dart'; |
| |
| class Base { |
| int constant1000() => 1000; |
| } |
| |
| class Foo extends Base { |
| final int base; |
| Foo(this.base); |
| |
| nestedAdderFunction(a, b, c, d, e) { |
| var result = a + b; |
| return () { |
| var result2 = c + d; |
| return () { |
| return base + result + result2 + e; |
| }; |
| }; |
| } |
| |
| nestedAdderFunction2(a, b, c, d, e) { |
| var result = a + b; |
| return () { |
| var base = super.constant1000; |
| var result2 = c + d; |
| return () { |
| return base() + result + result2 + e; |
| }; |
| }; |
| } |
| } |
| |
| nestedAdderFunction(a, b, c, d, e) { |
| var result = a + b; |
| return () { |
| var result2 = c + d; |
| return () { |
| return result + result2 + e; |
| }; |
| }; |
| } |
| |
| main() { |
| Expect.isTrue(nestedAdderFunction(1, 2, 3, 4, 5)()() == 15); |
| |
| var foo = new Foo(100); |
| Expect.isTrue(foo.nestedAdderFunction(1, 2, 3, 4, 5)()() == 115); |
| Expect.isTrue(foo.nestedAdderFunction2(1, 2, 3, 4, 5)()() == 1015); |
| |
| var funs = []; |
| for (int i = 0; i < 3; i++) { |
| funs.add(() => i); |
| } |
| Expect.isTrue((funs[0]() + funs[1]() + funs[2]()) == 3); |
| |
| var funs2 = []; |
| for (var i in [0, 1, 2]) { |
| funs2.add(() => i); |
| } |
| Expect.isTrue((funs2[0]() + funs2[1]() + funs2[2]()) == 3); |
| } |