[squeak-dev] The Trunk: Collections-eem.756.mcz
Tobias Pape
Das.Linux at gmx.de
Thu Jun 15 21:03:30 UTC 2017
> On 15.06.2017, at 22:52, Chris Muller <asqueaker at gmail.com> wrote:
>
> ^ self select: [ : each | seen addNew: each ]
I would expect that to return each not true/false…
>
> ?
>
>
> On Thu, Jun 15, 2017 at 3:50 PM, Chris Cunningham
> <cunningham.cb at gmail.com> wrote:
>>
>>
>> On Thu, Jun 15, 2017 at 1:22 PM, Tobias Pape <Das.Linux at gmx.de> wrote:
>>>
>>>
>>>> On 15.06.2017, at 21:40, Eliot Miranda <eliot.miranda at gmail.com> wrote:
>>>>
>>>> Hi Tobias,
>>>>
>>>> On Thu, Jun 15, 2017 at 12:32 PM, Tobias Pape <Das.Linux at gmx.de> wrote:
>>>>
>>>>> On 15.06.2017, at 21:22, Chris Cunningham <cunningham.cb at gmail.com>
>>>>> wrote:
>>>>>
>>>>> #testMissingThenAdd: ?
>>>>>
>>>>
>>>> #isAdding:
>>>> #ingests:
>>>>
>>>> #wasAbsentButNowIsPresent:
>>>>
>>>> (just rambling…)
>>>>
>>>> I like added:. Its concise, accurate and reads nicely:
>>>
>>>
>>> Ok, but then maybe #addedNew: ? So as we know more than just an adding
>>> operation succeeded… :)
>>
>>
>> So it reads:
>>
>> ^self select: [:each| seen addedNew: each]
>>
>> I like that how that reads.
>>
>> #added: wasn't bad - but I could see myself thinking it meant roughly 'was
>> this value already in the collection'? Which misses the add part and is
>> backwards on the result (true if present, false if added).
>>
>> -cbc
>>>
>>>
>>>>
>>>> withoutDuplicates
>>>> "Answer a copy of the receiver that preserves order but eliminates
>>>> any duplicates."
>>>> | seen |
>>>> seen := Set new: self size.
>>>> ^self select: [:each| seen added: each]
>>>>
>>>> messagesDo: aBlock
>>>> "Evaluate aBlock exactly once with all the message selectors sent
>>>> by me."
>>>>
>>>> | scanner aSet |
>>>> self isQuick ifTrue: [ ^self ].
>>>> scanner := InstructionStream on: self.
>>>> scanner scanFor: [ :x |
>>>> | selector |
>>>> (selector := scanner selectorToSendOrSelf) == scanner
>>>> ifFalse: [
>>>> ((aSet ifNil: [ aSet := IdentitySet new ]) added:
>>>> selector) ifTrue: [
>>>> aBlock value: selector ] ].
>>>> false "keep scanning" ]
>>>>
>>>>
>>>>
>>>>> On Jun 15, 2017 12:19 PM, "Eliot Miranda" <eliot.miranda at gmail.com>
>>>>> wrote:
>>>>> Hi Tobias,
>>>>>
>>>>> On Thu, Jun 15, 2017 at 12:06 PM, Tobias Pape <Das.Linux at gmx.de>
>>>>> wrote:
>>>>>
>>>>>> On 15.06.2017, at 20:30, Eliot Miranda <eliot.miranda at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> Hi Levente, Hi Chris,
>>>>>>
>>>>>> On Wed, Jun 14, 2017 at 1:10 PM, Levente Uzonyi
>>>>>> <leves at caesar.elte.hu> wrote:
>>>>>> On Wed, 14 Jun 2017, commits at source.squeak.org wrote:
>>>>>>
>>>>>> Eliot Miranda uploaded a new version of Collections to project The
>>>>>> Trunk:
>>>>>> http://source.squeak.org/trunk/Collections-eem.756.mcz
>>>>>>
>>>>>> ==================== Summary ====================
>>>>>>
>>>>>> Name: Collections-eem.756
>>>>>> Author: eem
>>>>>> Time: 14 June 2017, 11:03:24.917631 am
>>>>>> UUID: 8d7c03bc-1cdb-44c7-9173-10d50c0dae29
>>>>>> Ancestors: Collections-eem.755
>>>>>>
>>>>>> Add SequenceableCollection>>withoutDuplicates for a more elegant fix
>>>>>> to MailMessage>>to:
>>>>>>
>>>>>> =============== Diff against Collections-eem.755 ===============
>>>>>>
>>>>>> Item was added:
>>>>>> + ----- Method: SequenceableCollection>>withoutDuplicates (in
>>>>>> category 'copying') -----
>>>>>> + withoutDuplicates
>>>>>> + "Answer a copy of the receiver that preserves order but
>>>>>> eliminates any duplicates."
>>>>>> + | seen |
>>>>>> + seen := Set new: self size.
>>>>>> + ^self select: [:each|
>>>>>> + (seen includes: each)
>>>>>> + ifTrue: [false]
>>>>>> + ifFalse: [seen add: each.
>>>>>> true]]!
>>>>>>
>>>>>> What a great opportunity to use #addNewElement::
>>>>>>
>>>>>> ^self select: [ :each | seen addNewElement: each ]
>>>>>>
>>>>>> I love the functionality but I don't like the selector. It seems to
>>>>>> imply that one must only add a new element. So why not call this something
>>>>>> like addIfAbsent: ?
>>>>>>
>>>>>> Here are some suggestions. Votes?
>>>>>> - don't change it; stick with addNewElement:
>>>>>> - addIfAbsent:
>>>>>> - ifAbsentAdd:
>>>>>> - ifMissingAdd:
>>>>>>
>>>>>> I think I prefer ifAbsentAdd: cuz addIfAbsent: looks too much like a
>>>>>> potential spelling error, and conflicts with typical ifAbsent: arguments
>>>>>> supplying exception blocks. But I could go with ifMissingAdd: because it is
>>>>>> more distinctive.
>>>>>
>>>>> Well, we do have
>>>>>
>>>>> Collection>>addIfNotPresent:
>>>>>
>>>>> So why invent a new one?
>>>>>
>>>>> Because addIfNotPresent: answers its argument and we need one that
>>>>> answers whether the element was absent. So alas addIfNotPresent: is not a
>>>>> suitable candidate.
>>>>>
>>>>>
>>>>> I think the important thing with #addNewElement: is that it returns
>>>>> *whether* it added a new element
>>>>> but then again it breaks the tradition of #add* returning its
>>>>> argument…
>>>>>
>>>>> a very clear and very strange one that would reveal that a boolean is
>>>>> returned would be #isAbsentAndIfSoAdd: …
>>>>>
>>>>> wasAbsentAdding: or ifWasAbsentAdding: would be less cumbersome but I
>>>>> like something snappier that people will remember. ifMissingAdd: looks good
>>>>> because it doesn't conflict with the add*: methods answering their argument,
>>>>> and the ifMissing implies the answer is true if the element wasn't already
>>>>> present.
>>>>>
>>>>> Stéphane, can you live with ifMissingAdd: ? Chris?
>>>>>
>>>>> Best regards
>>>>> -Tobias
>>>>>
>>>>>> _,,,^..^,,,_
>>>>>> best, Eliot
>>>>>
>>>>> _,,,^..^,,,_
>>>>> best, Eliot
>>>>
>>>> _,,,^..^,,,_
>>>> best, Eliot
>>>>
>>>
>>>
>>
>>
>>
>>
>
More information about the Squeak-dev
mailing list
|