[Xotcl] why Attribute is not imported?
Gustaf Neumann
neumann at wu.ac.at
Mon Nov 2 09:52:07 CET 2009
Dear Mykhaylo,
The "slots" method changes the namespace to
make it convenient for the user to write
"Attribute name" and not
"Attribute test1::Test::slot::name".
The following snipped shows a simple solution,
but this is not nice either. With Tcl 8.5,
one could use instead of the "namespace import ..."
"namespace path ::xotcl" before "Attribute...".
namespace eval ::test1 {
namespace import ::xotcl::*
Class Test -slots {
namespace import ::xotcl::*
Attribute name
}
namespace export Test
}
This solution works, but is not nice either.
If you include the "contains" method below
in your script, your original example will
work as expected. I am planning to use this
definition in the 1.6.5 release.
best regards
-gustaf neumann
==============================
::xotcl::Object instproc contains {
{-withnew:boolean true}
-object
{-class ::xotcl::Object}
cmds} {
if {![info exists object]} {set object [::xotcl::self]}
if {![::xotcl::my isobject $object]} {
$class create $object
$object requireNamespace
namespace eval $object {namespace import ::xotcl::*}
}
if {$withnew} {
set m [::xotcl::ScopedNew new \
-inobject $object -withclass $class -volatile]
::xotcl::Class instmixin add $m end
namespace eval $object $cmds
::xotcl::Class instmixin delete $m
} else {
namespace eval $object $cmds
}
}
==============================
Mykhaylo Sorochan schrieb:
> Hello,
>
> Why in the following code launched from tclsh I get the error:
> invalid command name "Attribute" during '::test1::Test slots'
>
> ######
> package provide test1 0.1
> package require XOTcl
>
> namespace eval ::test1 {
> namespace import ::xotcl::*
> Class Test -slots {
> Attribute name
> }
> namespace export Test
> }
> namespace import ::test1::*
> ######
>
> XOTcl 1.6.4, works ok from xotclsh and when 'namespace import ::xotcl::*'
> comes right after 'package require XOTcl' and not within test1 namespace.
>
> Thanks.
>
>
More information about the Xotcl
mailing list