[squeak-dev] Boolean whenTrue:whenFalse:
Torge Husfeldt
torge.husfeldt at gmx.de
Thu May 16 15:13:36 UTC 2019
Hi Nico,
I'm convinced this only works without the extra [] value because you
chose a special selector. For keyword-selector it should go to "self".
Which part exactly is not optimized? The "ifTrue:" has a special
handling in the bytecode complier, and iirc yourself is also not
"actually sent".
Cdlt
Torge
On 16.05.19 17:08, Nicolas Cellier wrote:
> Hi,
> Ah yes, it works, no need for extra [] value
>
> (3 > 2) ifTrue: [Transcript cr; show: 'bingo!']; yourself
>
> The code is not optimized, but it works.
>
> Le jeu. 16 mai 2019 à 16:52, Torge Husfeldt <torge.husfeldt at gmx.de
> <mailto:torge.husfeldt at gmx.de>> a écrit :
>
> Salut Nico,
>
> please excuse if my squeak knowlege is a bit rusty, but wouldn't
> this do the job:
>
> self findlast: [:each |
>
> [self testSomeConditionFor: each] value ifTrue:[self
> performSomeAction:each]; yourself.
>
> ].
>
> Just an idea. And very sad that I have to wrap the condition in a
> block, but I guess othewise the recipient for "yourself" would be
> "self"
>
> On 14.05.19 17:02, Nicolas Cellier wrote:
>> Oups, my example was a bit stupid because findLast: loop stops at
>> first true, but you get my intention...
>> Replace with select:/reject: or provide a whenFalse: side effect...
>>
>> Le mar. 14 mai 2019 à 16:23, Nicolas Cellier
>> <nicolas.cellier.aka.nice at gmail.com
>> <mailto:nicolas.cellier.aka.nice at gmail.com>> a écrit :
>>
>> Hi,
>> From time to time, I need to perform some additional action
>> (side effect) when a boolean is true, but preserve that
>> boolean as return value.
>>
>> Here is a pseudo example:
>>
>> self findLast: [:each |
>> | conforming |
>> conforming := self testSomeConditionFor: each.
>> conforming
>> ifTrue:
>> [ "found one, do some side effect before
>> searching next"
>> self performSomeAction: each ].
>> conforming ].
>>
>> Or shorter, but I dislike the redundant true:
>>
>> self findLast: [:each |
>> (self testSomeConditionFor: each)
>> and:
>> [ "found one, do some side effect before
>> searching next"
>> self performSomeAction: each.
>> true ]].
>>
>> What i seek is even shorter:
>>
>> self findLast: [:each |
>> (self testSomeConditionFor: each)
>> whenTrue:
>> [ "found one, do some side effect before
>> searching next"
>> self performSomeAction: each ]].
>>
>> Of course, we would have companions whenFalse:,
>> whenTrue:whenFalse:...
>> Would you buy it?
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20190516/59374090/attachment-0001.html>
More information about the Squeak-dev
mailing list
|