On Tue 4. Apr 2017 at 19:05, Levente Uzonyi leves@caesar.elte.hu wrote:
On Tue, 4 Apr 2017, Eliot Miranda wrote:
On Apr 4, 2017, at 7:02 AM, Bert Freudenberg bert@freudenbergs.de
wrote:
On Tue, Apr 4, 2017 at 3:47 PM, Eliot Miranda <
eliot.miranda@gmail.com> wrote:
Hi Levente, > On Apr 3, 2017, at 11:14 AM, Levente Uzonyi <
leves@caesar.elte.hu> wrote:
> > The correct solution is: > > Array streamContents: [ :stream | > Smalltalk globals associationsDo: [ :binding | > binding class == Global ifTrue: [ stream nextPut:
binding ] ] ].
Or shorter
Smalltalk globals declarations select: #canAssign
maybe? Unlike class bindings, global vars are writable.
I don't like this. I see writability as orthogonal. I'm sure there's
good uses for read-only globals that are not classes. I like the tenseness though. So
Smalltalk globals declarations reject: #isClassBinding
with isClassBinding ^value isBehavior and: [key == value name]
Why not just ^true? It's a ClassBinding even if it's not initialized properly. And that should be the Environment's responibility.
Why not Array streamContents: [ :stream | Smalltalk globals associationsDo: [ :binding | (binding class == Global and: [ binding value isBehavior and: [ binding key == binding value name ] ]) ifTrue: [ stream nextPut: binding ] ] ].
Because we want to know the global *variables*, that is everything *but*
the class bindings. So we look for instances of Global, not ClassBinding, no matter the value.
Forgive me; I missed a not in there. But my point is that the classes
in global are in bindings whose keys are == to their name. Everything else is a global variable.
We have separate subclasses: ClassBinding and Global. We should use those.
Levente
Yep. Besides, with renaming on import the name of the class is not necessarily the same as its binding key.
- Bert -
> The role of declarations and bindings is still not clear in
Environments, therefore, as I wrote it before, unrelated to tool support, I still consider Environments to be incomplete.
I thought 'declarations' are the things owned by this environment
(excluding imports), whereas 'bindings' are the things visible in this environment (including imports).
Is there a definition in text somewhere? Colin?
- Bert -