[squeak-dev] The Inbox: Collections-cmm.1022.mcz

Jakob Reschke jakres+squeak at gmail.com
Sat Nov 19 18:09:10 UTC 2022


Hi,

Were the method new, I wouldn't mind if it treated empty fields
differently. But since it is not new, I think this is indeed a change that
may break applications if they have relied on the previous behavior.
Therefore I vote against it unless it is shown that Squeak is the only
Smalltalk that implements subStrings: in the current way. The ANSI standard
is unfortunately vague and not much guidance:

    Synopsis
       Answer an array containing the substrings in the receiver separated
by the elements of
       separators.
    Definition: <readableString>
       Answer an array of strings. Each element represents a group of
characters separated by any of the
       characters in the list of separators.
    Return Values
       <Array> unspecified

@Chris: does splitBy:, as recommended by Christoph, cover your requirements?

Should we add a message to split on _any_ of the elements of the argument
(like subStrings:, unlike splitBy:), preserving empty groups (like
splitBy:, unlike subStrings:)? For example, #splitByAnyOf:

Kind regards,
Jakob


Am Sa., 19. Nov. 2022 um 13:23 Uhr schrieb Thiede, Christoph <
Christoph.Thiede at student.hpi.uni-potsdam.de>:

> Hm ... don't we have #splitBy: for this? This seems like a possibly
> dangerous breaking change to me. No strong opinion, though. :-)
>
>
> Best,
>
> Christoph
> ------------------------------
> *Von:* Squeak-dev <squeak-dev-bounces at lists.squeakfoundation.org> im
> Auftrag von Chris Muller <asqueaker at gmail.com>
> *Gesendet:* Samstag, 19. November 2022 06:24:43
> *An:* squeak-dev at lists.squeakfoundation.org
> *Betreff:* Re: [squeak-dev] The Inbox: Collections-cmm.1022.mcz
>
> I don't know why subStrings: should behave differently for empty fields as
> non-empty.
>
> Before this change, empty fields are ignored:
>
>     'a:b::d' subStrings: ':'  ==> " #('a' 'b' 'd') "
>     '::::' subStrings: ':' ==> #()
>
> after this change, empty fields are honored:
>
>     'a:b::d' subStrings: ':'  ==> " #('a' 'b' '' 'd') "
>     '::::' subStrings: ':' ==>  #('' '' '' '')
>
> Thoughts?
>
>  - Chris
>
> On Fri, Nov 18, 2022 at 11:14 PM <commits at source.squeak.org> wrote:
>
>> Chris Muller uploaded a new version of Collections to project The Inbox:
>> http://source.squeak.org/inbox/Collections-cmm.1022.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Collections-cmm.1022
>> Author: cmm
>> Time: 18 November 2022, 11:14:01.223447 pm
>> UUID: 9a05d251-4f02-43de-94e8-0f077ec51680
>> Ancestors: Collections-nice.1021
>>
>> Allow empty fields when using #subStrings:.
>>
>> =============== Diff against Collections-nice.1021 ===============
>>
>> Item was changed:
>>   ----- Method: String>>subStrings: (in category 'converting') -----
>>   subStrings: separators
>>         "Answer an array containing the substrings in the receiver
>> separated
>>         by the elements of separators."
>>         | char result sourceStream subString |
>> -       #Collectn.
>> -       "Changed 2000/04/08 For ANSI <readableString> protocol."
>>         (separators isString or:[separators allSatisfy: [:element |
>> element isCharacter]]) ifFalse:
>>                 [^ self error: 'separators must be Characters.'].
>>         sourceStream := ReadStream on: self.
>>         result := OrderedCollection new.
>>         subString := String new.
>>         [sourceStream atEnd]
>>                 whileFalse:
>>                         [char := sourceStream next.
>>                         (separators includes: char)
>> +                               ifTrue: [result add: subString copy.
>> +                                                       subString :=
>> String new]
>> -                               ifTrue: [subString notEmpty
>> -                                               ifTrue:
>> -                                                       [result add:
>> subString copy.
>> -                                                       subString :=
>> String new]]
>>                                 ifFalse: [subString := subString ,
>> (String with: char)]].
>>         subString notEmpty ifTrue: [result add: subString copy].
>>         ^ result asArray!
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20221119/52c987d7/attachment.html>


More information about the Squeak-dev mailing list