| ## examples/closure_oop.av |
| |
| ## a function to return a rectangle instance. |
| fn rectangle(x, y) { |
| let r = seq.map("x", x, "y", y); |
| |
| r.area = lambda() -> |
| return r.x * r.y; |
| end; |
| r.circum = lambda() -> |
| return 2 * (r.x + r.y); |
| end; |
| |
| return r; |
| } |
| |
| let s1 = rectangle(3, 4); |
| |
| println("s1 info:"); |
| println("s1.x: #{s1.x}"); |
| println("s1.y: #{s1.y}"); |
| println("s1 area: #{s1.area()}"); |
| println("s1 circum: #{s1.circum()}"); |
| p(); |
| |
| let s2 = rectangle(9, 10); |
| |
| println("s2 info:"); |
| println("s2.x: #{s2.x}"); |
| println("s2.y: #{s2.y}"); |
| println("s2 area: #{s2.area()}"); |
| println("s2 circum: #{s2.circum()}"); |
| p(); |
| |
| s2.x = 100; |
| s2.y = 200; |
| println("s2 info after setting:"); |
| println("s2.x: #{s2.x}"); |
| println("s2.y: #{s2.y}"); |
| println("s2 area: #{s2.area()}"); |
| println("s2 circum: #{s2.circum()}"); |