view 2-Io/day3-method_missing.io @ 51:178b18b4f9ba

Start experimenting with Prolog
author IBBoard <dev@ibboard.co.uk>
date Mon, 25 Sep 2017 20:49:52 +0100
parents 46a807289724
children
line wrap: on
line source

# Altering "forward" in Io is apparently similar to overriding
# method_missing in Ruby. Except with more to go wrong because
# we have prototypes and not classes.

# Building arbitrary (basic) XML using a Builder prototype that
# assumes all missing methods are XML tags

Builder := Object clone

# This is the dangerous method
Builder forward := method(
    writeln("<", call message name, ">")
    call message arguments foreach(
        arg,
        # This will trigger another call to forward
        # It's not clear why "writeln" would return a string rather than write to the console
        # But apparently it does. Because poorly documented Io.
        content := self doMessage(arg)
        # No strong type checking here - it's all based on string names
        if (content type == "Sequence", writeln(content))
    )
    writeln("</", call message name, ">")
)

Builder ul(
    li("Obscure"),
    li("Undocumented"),
    li("Unclear")
)