[squeak-dev] List of all global variables? (Environments?)
Levente Uzonyi
leves at caesar.elte.hu
Mon Apr 3 18:14:26 UTC 2017
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 at 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
>>
>>
>> [1] http://wiki.squeak.org/squeak/1824
>>
>
More information about the Squeak-dev
mailing list
|