On Sep 28, 2008, at 8:33 AM, Norbert Hartl wrote:
On Sun, 2008-09-28 at 07:54 -0500, Mark Volkmann wrote:
How are constants represented in Smalltalk? Do you create a method whose name is the name of the constant and return the value?
You have several ways to define something you could call "constant". If we see a constant as a global accessible thing that doesn't change and has something like a name you have multiple options:
- #myConstant Symbol. That is globally available and is always
the same object.
- a class. A class is an object with a name that is globally
accessible and gives the same object everytime
- cached instances. You define class methods that create
instances and cache the instances. This way you get the same object everytime you invoke the class method
I think there even more possibilities. What you should use depends on what you are trying to achieve. A symbol is just the name. A class serves this purpose quite well for a lot scenarios. But you don't want to create classes only because you need some constant value.
I think my main issue is scoping. I want to define a constant that is associated with a class to avoid name conflicts. Maybe that's not the Smalltalk way. Similarly I'm concerned about defining a class, then later installing a library that contains a class with the same name as one of mine. Does that issue come up very often? I'm concerned about the lack of support for namespaces (packages in Java).
--- Mark Volkmann