[squeak-dev] Boolean whenTrue:whenFalse:
K K Subbu
kksubbu.ml at gmail.com
Fri May 17 11:02:47 UTC 2019
This also works:
('isBoolean' beginsWith: 'is') ifTrue: [Display flash: World bounds];
yourself
Regards .. Subbu
On 16/05/19 8:43 PM, Torge Husfeldt wrote:
> 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?
>>>
>>>
>>>
>>
>>
>
>
More information about the Squeak-dev
mailing list
|