[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