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

Re: [Xotcl] [self class] inside [eval]

From: Uwe Zdun <uwe.zdun_at_wu-wien.ac.at>
Date: Mon, 06 Sep 2004 16:06:16 +0200

Hi again,

well the problem here is the same as before. "eval" passes the control
to the Tcl eval command implementation.
That is, all what is called inside an "eval" in an object's namespace
bypasses the XOTcl dispatcher.
So the callstack entries are not correct. also filters/mixins do not
work here.
You should always use the XOTcl invocation syntax "objName methodName
args", like:

$newOb eval {
 $newOb doStuff
}

I would like to make it impossible to call doStuff directly here, as in
the example below, but this would
require changes to the Tcl core or has a performance impact; so we chose
to live with the problem that
procs can be called directly via the namespace

Uwe




Kristoffer Lawson wrote:

>
> Still looking for an official explanation for the operations of [eval]
> (and other stuff I posted), but here's another one. The code follows:
>
> package require XOTcl 1.3
> namespace import xotcl::*
>
> Class Foo -parameter doors
>
> Foo instproc init {req} {
> puts $req
> }
>
>
> Object ob
>
> set newOb [Foo new -childof ob hello -doors 4]
> puts "Doors: [$newOb doors]"
>
> $newOb proc doStuff {} {
> puts "class: [self class]"
> set newOb [[self class] new -childof [self] whatevah -doors 3]
> puts "Doors: [$newOb doors]"
> }
>
>
> $newOb doStuff
>
> #$newOb eval {
> # doStuff
> #}
>
> This version correctly states that the class for [self class] is an
> empty string. However, if I comment out the "eval" version and use it
> instead, [self class] gives me "::xotcl::Object".
>
> / http://www.fishpool.com/~setok/
> _______________________________________________
> Xotcl mailing list - Xotcl_at_alice.wu-wien.ac.at
> http://alice.wu-wien.ac.at/mailman/listinfo/xotcl


-- 
Uwe Zdun
Department of Information Systems, Vienna University of Economics
Phone: +43 1 313 36 4796, Fax: +43 1 313 36 746
zdun_at_acm.org, uwe.zdun_at_wu-wien.ac.at