Created
May 14, 2010 03:52
-
-
Save hypomodern/400792 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# bare Prototypes begin with a Capital Letter, and you usually clone Object: | |
Cube := Object clone | |
# := creates a new 'slot' on the receiver and sets that slot to the value of the right-hand side: | |
Cube sides := 6 | |
# Io has simple message-passing, no operator used: 'Receiver message' | |
Cube sides # ===> 6 | |
# to def a method rather than a raw property, use the "method" message: | |
Cube description := method("A Plain Platonic Solid" print) | |
# methods are called just the same: | |
Cube description # => A Plain Platonic Solid | |
# 'inheritance' is via explicit clone. | |
D6 := Cube clone | |
# check properties and methods with "slotNames"... | |
D6 slotNames # => list(type) waitaminute! | |
# ...but method searching is done up the prototype chain, so there are no slotNames here, yet... | |
D6 sides # => 6 | |
# to create an instance, use a lower-cased variable name when cloning | |
D6 description := method("A six-sided 3-D shape with pips on the sides") | |
fancy_d6 = D6 clone do( | |
description := "A Gold-plated Wonder of a die" | |
) | |
# use "proto" to get the next object up the chain: | |
fancy_d6 proto proto # => Cube... | |
# use "perform" to send a Sequence (=String) as a message | |
fancy_d6 perform("sides") # is the same as d6 sides, but now we know how to metaprogram a bit! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment