File: Ch07_06_01_RepresentingObject.sml

package info (click to toggle)
smlsharp 4.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 123,732 kB
  • sloc: ansic: 16,725; sh: 4,347; makefile: 2,191; java: 742; haskell: 493; ruby: 305; cpp: 284; pascal: 256; ml: 255; lisp: 141; asm: 97; sql: 74
file content (29 lines) | stat: -rw-r--r-- 684 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
fn self => fn x => self := (!self # {X = x});

val pointClass =
{
  getX = fn self => #X (!self),
  setX = fn self => fn x => self := (!self # {X = x}),
  getY = fn self => #Y (!self),
  setY = fn self => fn x => self := (!self # {Y = x}),
  getColor = fn self => #Color (!self),
  setColor = fn self => fn x => self := (!self # {Color = x})
};

local
  val state = ref { X = 0.0, Y = 0.0 }
in 
  val myPoint = fn method => method pointClass state
end;

local
  val state = ref { X = 0.0, Y = 0.0, Color = "Red" }
in 
  val myColorPoint = fn method => method pointClass state
end;

myPoint # setX 1.0;
myPoint # getX;
myColorPoint # getX;
myColorPoint # getColor;
myPoint # getColor;