Make Grid object mutable.
authorSiraaj Khandkar <siraaj@khandkar.net>
Thu, 4 Aug 2016 20:18:29 +0000 (16:18 -0400)
committerSiraaj Khandkar <siraaj@khandkar.net>
Thu, 4 Aug 2016 20:18:29 +0000 (16:18 -0400)
As it doesn't seem that a fully immutable object is possible in general (even
if it kinda works in this case, since there's nothing that needs to be hidden),
since all relevant data must pass through a public constructor.

Is a private constructor possible? If so, immutable objects can be doable.

life/006/life.ts

index e99d3fd..ac4b969 100644 (file)
@@ -4,7 +4,7 @@ type GridLocation = {r: number, k: number};
 
 interface GridInterface<A> {
     get            : (location: GridLocation) => A;
-    map            : (f : (location: GridLocation) => A) => Grid<A>;
+    map            : (f : (location: GridLocation) => A) => void;
     moore_neighbors: (origin : GridLocation) => Array<GridLocation>;
     print          : (toString : (A: A) => string) => void;
 };
@@ -61,9 +61,7 @@ class Grid<A> implements GridInterface<A> {
                 cells[r][k] = f(location);
             }
         };
-        const init = ({r, k}) => cells[r][k];
-        const grid = new Grid({rows: this.rows, columns: this.columns, init: init});
-        return grid
+        this.cells = cells;
     };
 
     private print_border(): void {
@@ -160,7 +158,7 @@ namespace Life {
         };
 
         next() : void {
-            const grid = this.grid.map(
+            this.grid.map(
                 (location) => {
                     const neighbor_locations = this.grid.moore_neighbors(location);
                     const neighbor_states = neighbor_locations.map((l) => this.grid.get(l));
@@ -170,7 +168,6 @@ namespace Life {
                     return state_1
                 }
             );
-            this.grid = grid
         };
 
         print() : void {
This page took 0.02785 seconds and 4 git commands to generate.