annotate 2-Io/day1-methods.io @ 103:98be775c533c default tip

An odd "non-determinism" example from StackOverflow It is clever, but doesn't make much sense as to how it gets its results
author IBBoard <dev@ibboard.co.uk>
date Sun, 14 Jul 2019 13:44:13 +0100
parents 4d3769ac447c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
32
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
1 # Methods are objects, defined by some new notation:
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
2 # method(object message[…])
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
3
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
4 # This would show something in REPL but is useless in normal execution
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
5 method("This does nothing but print something, but with the line-break" println)
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
6 # Methods are of type "Block"
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
7 method() type println
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
8 # And they can be assigned to slots like values
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
9 Car := Object clone
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
10 ferrari := Car clone
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
11 Car drive := method("Vroom" println)
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
12 # Note that "cloning" isn't a one-time thing - we modified Car after creating
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
13 # ferrari, but it now has the `drive` method anyway. This is good, but
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
14 # doesn't *quite* match the naming
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
15 ferrari drive
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
16
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
17 # You can also retrieve slots (methods or values), which walks up the heirarchy if necessary
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
18 ferrari getSlot("drive") println
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
19 # And you can find out what its prototype is
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
20 # (i.e. what it inherited from and what exists)
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
21 ferrari proto println
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
22 # But what if we add something to the ferrari? that isn't covered yet
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
23 ferrari name := "My Fast Car"
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
24 ferrari proto println
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
25 ferrari name println
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
26 # It seems to only cover the parent stuff
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
27
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
28 # There's also a "master namespace" that all the objects get created in:
4d3769ac447c Add notes and code on methods in Io
IBBoard <dev@ibboard.co.uk>
parents:
diff changeset
29 Lobby println