[squeak-dev] The Trunk: Collections-ct.982.mcz
Levente Uzonyi
leves at caesar.elte.hu
Sun Jan 30 13:56:34 UTC 2022
Hi Christoph,
I just had the idea to use a proxy that converts cascades to chained
message sends to support your use case.
The following snippet
((((((1 to: 100) asArray reversed
collect: [ :each | each squared + 1 ])
select: #even)
collect: [ :each | each // 2 ])
select: [ :each | each \\ 7 = 1 ])
first: 5)
sorted
can be written as
(1 to: 100) wrap: [ :wrapper |
wrapper
asArray;
reversed;
collect: [ :each | each squared + 1 ];
select: #even;
collect: [ :each | each // 2 ];
select: [ :each | each \\ 7 = 1 ];
first: 5;
sorted ]
I attached the change set in case you're interested.
Levente
-------------- next part --------------
'From Squeak5.3 of 15 April 2020 [latest update: #19435] on 30 January 2022 at 2:27:17 pm'!
Smalltalk renameClassNamed: #ChainedObjectWrapper as: #ChainedObjectWrapper!
ProtoObject subclass: #ChainedObjectWrapper
instanceVariableNames: 'object'
classVariableNames: ''
poolDictionaries: ''
category: 'ChainedObjectWrapper'!
!ChainedObjectWrapper commentStamp: 'ul 1/30/2022 14:24' prior: 0!
I am a proxy-like object that lets you use cascades but the message sends are chained, so that you don't have to use parentheses.
Do not use me directly, send #wrap: to the receiver instead.
For example, the two snippets below are equivalent.
(1 to: 100) wrap: [ :wrapper |
wrapper
asArray;
reversed;
collect: [ :each | each squared + 1 ];
select: #even;
collect: [ :each | each // 2 ];
select: [ :each | each \\ 7 = 1 ];
first: 5;
sorted ]
((((((1 to: 100) asArray reversed
collect: [ :each | each squared + 1 ])
select: #even)
collect: [ :each | each // 2 ])
select: [ :each | each \\ 7 = 1 ])
first: 5)
sorted
Instance Variables
object: <Object>
object
- the object the next message should be proxied to!
]style[(244 1 1 1 3 1 3 2 5 4 7 1 1 2 7 3 7 4 8 4 8 1 1 2 4 1 1 1 4 1 7 1 1 1 1 1 1 4 7 1 5 4 8 1 1 2 4 1 1 1 4 1 2 1 1 1 1 4 7 1 1 2 4 1 1 1 4 1 2 1 1 1 1 1 1 1 1 4 6 1 1 4 6 3 1 1 1 1 1 1 1 1 1 3 1 3 1 1 7 1 8 2 8 1 1 2 4 1 1 1 4 1 7 1 1 1 1 1 1 1 2 7 1 5 1 2 8 1 1 2 4 1 1 1 4 1 2 1 1 1 1 1 2 7 1 1 2 4 1 1 1 4 1 2 1 1 1 1 1 1 1 1 1 2 6 1 1 3 6 99),cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000126000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000126000,cblack;,c000000126,cblack;,c000126000,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000126000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,,cblack;,c000126000,c126000126,c126000000,c000234000,c234140000,c126000000,cblack;,c000000126,cblack;,c126000000,c234140000,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c234140000,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c234140000,c000234000,cblack;,c000000126,cblack;,c000000126,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c126000000,c126000126,cblack;,c000000126,cblack;,c126000126,cblack;,c000000126,cblack;,cgray;,cblack;,c000000126,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,cblack;,c126000000,cblack;,c126000126,c000126000,cblack;,c000000126,cblack;,c126000000,cblack;,c000000126,!
!ChainedObjectWrapper methodsFor: 'system primitives' stamp: 'ul 1/30/2022 13:23'!
doesNotUnderstand: aMessage
object := aMessage sendTo: object! !
!Object methodsFor: '*ChainedObjectWrapper' stamp: 'ul 1/30/2022 13:27'!
wrap: aBlock
| wrapper |
wrapper := ChainedObjectWrapper on: self.
aBlock value: wrapper.
^thisContext object: wrapper instVarAt: 1! !
!ChainedObjectWrapper class methodsFor: 'instance creation' stamp: 'ul 1/30/2022 13:26'!
on: anObject
| wrapper |
wrapper := self new.
thisContext object: wrapper instVarAt: 1 put: anObject.
^wrapper! !
!ChainedObjectWrapper reorganize!
('system primitives' doesNotUnderstand:)
!
More information about the Squeak-dev
mailing list
|