Respond to an unknown method call: Difference between revisions

From Rosetta Code
Content added Content deleted
m (Clarify that the task isn't just method name reflection)
(add some omits...)
Line 33: Line 33:
example ding dong; # prints “tried to handle unknown method "ding"”
example ding dong; # prints “tried to handle unknown method "ding"”
# prints “it had arguments: dong”</lang>
# prints “it had arguments: dong”</lang>

{{omit from|C}}
{{omit from|C++}}
{{omit from|Java}}

Revision as of 23:29, 3 June 2009

Task
Respond to an unknown method call
You are encouraged to solve this task according to the task description, using any language you may know.

Demonstrate how to make the object respond (sensibly/usefully) to an invocation of a method on it that it does not support through its class definitions. Note that this is not the same as just invoking a defined method whose name is given dynamically; the method named at the point of invocation must not be defined.

This task is intended only for object systems that use a dynamic dispatch mechanism.

Tcl

Works with: Tcl version 8.6

<lang tcl># First create a simple, conventional class and object oo::class create Example {

   method foo {} {
       puts "this is foo"
   }
   method bar {} {
       puts "this is bar"
   }

} Example create example

  1. Modify the object to have a custom ‘unknown method’ interceptor

oo::objdefine example {

   method unknown {name args} {
       puts "tried to handle unknown method \"$name\""
       if {[llength $args]} {
           puts "it had arguments: $args"
       }
   }

}

  1. Show off what we can now do...

example foo; # prints “this is foo” example bar; # prints “this is bar” example grill; # prints “tried to handle unknown method "grill"” example ding dong; # prints “tried to handle unknown method "ding"”

                  # prints “it had arguments: dong”</lang>