| www.delorie.com/gnu/docs/smalltalk/gst_14.html | search |
![]() Buy GNU books! | |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Using namespaces if often merely a matter of rewriting the loading script this way:
Smalltalk addSubspace: #NewNS!
Namespace current: NewNS!
...
Namespace current: Smalltalk!
|
Also remember that pool dictionaries are actually "pool namespaces", in the
sense that including a namespace in the pool dictionaries list will
automatically include its superspaces too. Declaring a namespace as a
pool dictionaries is similar in this way to C++'s using namespace
declaration.
Finally, be careful when working with fundamental system classes. Although you can use code like
Smalltalk Set variableSubclass: #Set
...
category: 'My application-Extensions'
|
or the equivalent syntax Set extend, this approach won't work
when applied to core classes. For example, you might be successful with
a Set or WriteStream object, but subclassing SmallInteger this way can bite
you in strange ways: integer literals will still belong to the Smalltalk
dictionary's version of the class (this holds for Arrays, Strings, etc.
too), primitive operations will still answer standard Smalltalk SmallIntegers,
and so on. Or, variableWordSubclasses will recognize 32-bit
Smalltalk LargeInteger objects, but not LargeIntegers belonging
to your own namespace.
Unfortunately this problem is not easy to solve since Smalltalk has to cache
the OOPs of determinate class objects for speed--it would not be feasible
to lookup the environment to which sender of a message belongs every time
the + message was sent to an Integer.
So, GNU Smalltalk namespaces cannot yet solve 100% of the problem of clashes between extensions to a class--for that you'll still have to rely on prefixes to method names. But they do solve the problem of clashes between class names and pool dictionary names, so you might want to give them a try. An example of using namespaces is given by the `examples/Publish.st' file in the GNU Smalltalk source code directory.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| webmaster donations bookstore | delorie software privacy |
| Copyright © 2003 by The Free Software Foundation | Updated Jun 2003 |