Both solutions are wrong. The one you found on the wiki will be fooled by any global pointing to a class. The one you came up with will also lose the bindings themselves. The correct solution is:
Array streamContents: [ :stream | Smalltalk globals associationsDo: [ :binding | binding class == Global ifTrue: [ stream nextPut: binding ] ] ].
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.
Levente
On Mon, 3 Apr 2017, H. Hirzel wrote:
P.S. A more elegant solution is mentioned at the bottom of page http://wiki.squeak.org/squeak/1824
Smalltalk globals reject: [:each | each class isMeta]
Result attached.
For that to work Environment needs the addition of
reject: aBlock ^ declarations reject: aBlock
in the 'emulating' instance method protocol
On 4/3/17, H. Hirzel hannes.hirzel@gmail.com wrote:
Hello
The recipe: How to list all global variables [1]
has the code snippet
Smalltalk keys select: [:k | ((Smalltalk at: k) isKindOf: Class) not] thenCollect: [:k | k -> (Smalltalk at: k) class]
to give a list of global variables.
When executing this code the recommendation is to use
Smalltalk globals
instead of
Smalltalk keys
A rewrite because of Environments not having #select:thenCollect: (I do not think that is necessary) then is
(Smalltalk globals select: [:k | ((Smalltalk at: k) isKindOf: Class)
not]) collect: [:k | k -> (Smalltalk at: k) class]
Then I get 'key not found: ExtendedNumberParser'.
I wonder what is going on here ...
Regards Hannes