view 2-Io/day3-method_missing.io @ 48:46a807289724

Add a noddy "builder" to show overriding "forward" for missing methods
author IBBoard <dev@ibboard.co.uk>
date Fri, 22 Sep 2017 20:00:39 +0100
parents
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")
)