From: Siraaj Khandkar Date: Thu, 4 Aug 2016 20:18:29 +0000 (-0400) Subject: Make Grid object mutable. X-Git-Url: https://git.xandkar.net/?p=cellular-automata.git;a=commitdiff_plain;h=6fe41dc7e88d0b191c2e8d522d66500203ed2bb8 Make Grid object mutable. 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. --- diff --git a/life/006/life.ts b/life/006/life.ts index e99d3fd..ac4b969 100644 --- a/life/006/life.ts +++ b/life/006/life.ts @@ -4,7 +4,7 @@ type GridLocation = {r: number, k: number}; interface GridInterface { get : (location: GridLocation) => A; - map : (f : (location: GridLocation) => A) => Grid; + map : (f : (location: GridLocation) => A) => void; moore_neighbors: (origin : GridLocation) => Array; print : (toString : (A: A) => string) => void; }; @@ -61,9 +61,7 @@ class Grid implements GridInterface { 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 {