view 2-Io/day2-reflection.io @ 101:1fae0cca1ef8

Reduce large maze to single width corridors This reduces the permutations for a x x x b x To one (two steps north) from four (two steps north; one east, two north, one west; one east, one north, one west, one north; and one north, one east, one north, one west). Longer corridors were worse! We would filter this in the "been here before via another path" but that's still a lot of lookups in lists, which is inefficient.
author IBBoard <dev@ibboard.co.uk>
date Sun, 14 Jul 2019 13:42:24 +0100
parents e8407d4e72dd
children
line wrap: on
line source

# Reflection in Io is about working out what goes on in slots
# We're now going to create an "ancestors" method that we needed
# on day 1 to find all slots!
Object ancestors := method(
    # Store our prototype
    prototype := self proto
    # If we're not at the top
    if (prototype != Object,
        # Then print the type name as a header
        writeln("Slots of ", prototype type,"\n--------------------")
        # And iterate the slots with foreach() before printing with writeln()
        # TODO: Find the difference between println and writeln, other than "message vs function"
        prototype slotNames foreach(slotName, writeln(slotName))
        # Blank line
        writeln
        # Recurse!
        prototype ancestors
    )
)

Animal := Object clone
Animal speak := method("*ambiguous animal noise" println)
Duck := Animal clone
Duck speak := method("Quack-quack!" println)
Duck walk := method("waddle" println)
donald := Duck clone
donald ancestors