View · Search · Index
No registered users in community xowiki
in last 10 minutes

Re: [Xotcl] Help with Filters. Resubmission.

From: Uwe Zdun <uwe.zdun_at_uni-essen.de>
Date: Mon, 17 Dec 2001 17:40:01 +0100

The problem below is that a filter (like a mixin) is only called if a method
to be dispatched exists for an object ... maa does not exist for A's objects,
therefore, the filter is not called, but unknown is called. The standard
unknown raises the error here. You can test this by adding a custom unknown
to A (of course you can also handle the delegation in unknown):

A instproc unknown args {
  puts "unknown $args --> error"
  next
}


On Saturday 15 December 2001 16:28, Sheik Yussuff wrote:
> Below is nonsensical sample code to illustrate a problem I
> am having with filters. On invocation of:
> a mb (see code section below)
> 1. Object a is sent the message mb(not an instproc) of A
> 2. Filter af of object a intercepts and
> dispatches message mbb to object b
> 3. Filter bf of object b intercepts and
> redispatches message maa to object a
> This time the filter af does not intercept message maa!!
> The message maa is sent directly to object a with
> the resulting error: object a unable to dispatch
> method maa.
>
> Can anyone assist me in explaining what is happening here?
> ------------------------------------------------------------
> #Code: Win 98 version 0.91; got same problem with ver 0.85 3 months ago.
>
> Class A -parameter {delegate}
>
> A instproc af args {
> set method [self calledproc]
> if {[[self] exists delegate]} {
> set del [[self] set delegate]
> if {$method == "maa"} {
> return [eval $del mbb]
> }
> if {$method != "ma"} {
> return [eval $del $method $args]
> }
> }
> next
> }
>
> A instfilter {af}
>
> A instproc ma args {
> puts "method ma of A"
> }
>
>
> Class B
> B instproc bf args {
> set sender [self callingobject]
> set method [self calledproc]
> puts "method is: $method"
> if {$method == "mb"} {
>
> return [eval $sender maa]
> }
> next
> }
>
> B instfilter bf
>
> B instproc mb args {
> puts "method mb of B"
> }
>
> B instproc mbb args {
> puts "method mbb of B"
> }
>
> B b
> A a
> a delegate b
> #a ma ; #works ok
> a mb
>
>
>
> _______________________________________________
> Xotcl mailing list - Xotcl_at_alice.wu-wien.ac.at
> http://alice.wu-wien.ac.at/mailman/listinfo/xotcl

-- 
Uwe Zdun
Institute for Computer Science, University of Essen
Phone: +49 201 81 00 332, Fax: +49 201 81 00 398
zdun_at_{xotcl,computer,acm}.org, uwe.zdun_at_uni-essen.de