[squeak-dev] The Inbox: Collections-mt.848.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Aug 14 13:51:56 UTC 2019
A new version of Collections was added to project The Inbox:
http://source.squeak.org/inbox/Collections-mt.848.mcz
==================== Summary ====================
Name: Collections-mt.848
Author: mt
Time: 14 August 2019, 3:51:55.072512 pm
UUID: 374f81b1-f8c1-1a49-9078-ce11ed34de8b
Ancestors: Collections-fn.847
Resolve the discussion about Collections-ct.827 (http://forum.world.st/The-Inbox-Collections-ct-827-mcz-td5099876.html) to move or not to move #joinSeparatedBy:.
1) Do not move it.
2) Document the decision in #joinSeparatedBy:.
3) Prepare similar "print-on-delimiter" on Collection for deprecation.
4) Add #joinOn: ... similar to #printElemetsOn:.
So, there is still that #printElementsOn: working on all kinds of Collection.
=============== Diff against Collections-fn.847 ===============
Item was changed:
+ ----- Method: Collection>>asCommaString (in category 'printing - obsolete') -----
- ----- Method: Collection>>asCommaString (in category 'printing') -----
asCommaString
"Return collection printed as 'a, b, c' "
+ self flag: #deprecate.
+ ^ self asArray joinSeparatedBy: ', '
- ^String streamContents: [:s | self asStringOn: s delimiter: ', ']
!
Item was changed:
+ ----- Method: Collection>>asCommaStringAnd (in category 'printing - obsolete') -----
- ----- Method: Collection>>asCommaStringAnd (in category 'printing') -----
asCommaStringAnd
"Return collection printed as 'a, b and c' "
+ self flag: #deprecate.
^String streamContents: [:s | self asStringOn: s delimiter: ', ' last: ' and ']
!
Item was changed:
+ ----- Method: Collection>>asStringOn:delimiter: (in category 'printing - obsolete') -----
- ----- Method: Collection>>asStringOn:delimiter: (in category 'printing') -----
asStringOn: aStream delimiter: delimString
- "Print elements on a stream separated
- with a delimiter String like: 'a, b, c'
- Uses #asString instead of #print:."
+ self flag: #deprecate.
+ ^ self asArray joinSeparatedBy: delimString!
- self do: [:elem | aStream nextPutAll: elem asString]
- separatedBy: [aStream nextPutAll: delimString]!
Item was changed:
+ ----- Method: Collection>>asStringOn:delimiter:last: (in category 'printing - obsolete') -----
- ----- Method: Collection>>asStringOn:delimiter:last: (in category 'printing') -----
asStringOn: aStream delimiter: delimString last: lastDelimString
"Print elements on a stream separated
with a delimiter between all the elements and with
a special one before the last like: 'a, b and c'.
Uses #asString instead of #print:
Note: Feel free to improve the code to detect the last element."
| n sz |
+ self flag: #deprecate.
+
n := 1.
sz := self size.
self do: [:elem |
n := n + 1.
aStream nextPutAll: elem asString]
separatedBy: [
aStream nextPutAll: (n = sz ifTrue: [lastDelimString] ifFalse: [delimString])]!
Item was changed:
----- Method: Collection>>printElementsOn: (in category 'printing') -----
printElementsOn: aStream
- "The original code used #skip:, but some streams do not support that,
- and we don't really need it."
+ self
+ printElementsOn: aStream
+ separatedBy: String space.!
- aStream nextPut: $(.
- self do: [:element | aStream print: element] separatedBy: [aStream space].
- aStream nextPut: $)!
Item was added:
+ ----- Method: Collection>>printElementsOn:separatedBy: (in category 'printing') -----
+ printElementsOn: aStream separatedBy: delimiter
+ "Do not use #print: on the delemiter to have more control over the output. Strings get quoted, Characters get prefixed, etc."
+
+ self
+ do: [:element | aStream print: element]
+ separatedBy: [aStream nextPutAll: delimiter asString].!
Item was changed:
----- Method: Collection>>printOn: (in category 'printing') -----
printOn: aStream
"Append a sequence of characters that identify the receiver to aStream."
self printNameOn: aStream.
+
+ aStream nextPut: $(.
+ self printElementsOn: aStream.
+ aStream nextPut: $).
+ !
- self printElementsOn: aStream!
Item was changed:
+ ----- Method: Collection>>printOn:delimiter: (in category 'printing - obsolete') -----
- ----- Method: Collection>>printOn:delimiter: (in category 'printing') -----
printOn: aStream delimiter: delimString
- "Print elements on a stream separated
- with a delimiter String like: 'a, b, c' "
+ self flag: #deprecate.
+ self
+ printElementsOn: aStream
+ separatedBy: delimString.!
- self do: [:elem | aStream print: elem] separatedBy: [aStream print: delimString]
- !
Item was changed:
+ ----- Method: Collection>>printOn:delimiter:last: (in category 'printing - obsolete') -----
- ----- Method: Collection>>printOn:delimiter:last: (in category 'printing') -----
printOn: aStream delimiter: delimString last: lastDelimString
"Print elements on a stream separated
with a delimiter between all the elements and with
a special one before the last like: 'a, b and c'
Note: Feel free to improve the code to detect the last element."
| n sz |
+ self flag: #deprecate.
n := 1.
sz := self size.
self do: [:elem |
n := n + 1.
aStream print: elem]
separatedBy: [
n = sz
ifTrue: [aStream print: lastDelimString]
ifFalse: [aStream print: delimString]]!
Item was added:
+ ----- Method: SequenceableCollection>>joinOn: (in category 'printing') -----
+ joinOn: stream
+
+ ^ self joinOn: stream separatedBy: ''!
Item was added:
+ ----- Method: SequenceableCollection>>joinOn:separatedBy: (in category 'printing') -----
+ joinOn: stream separatedBy: aSeparator
+
+ self
+ do: [:ea | stream nextPutAll: ea asString]
+ separatedBy: [stream nextPutAll: aSeparator asString].!
Item was changed:
----- Method: SequenceableCollection>>joinSeparatedBy: (in category 'converting') -----
joinSeparatedBy: aSeparator
+ "Returns a string, which is a concatenation of each element's string representation separated by another string.
+
+ August 2019 -- http://forum.world.st/The-Inbox-Collections-ct-827-mcz-td5099876.html
+ There was a discussion about whether to move this method up to Collection. We identified a trade-off between (iinterface) convenience and (result) predictability. In Collection, this method would be available for Set, too. However, random result order makes such a feature questionable. What would be the result of #(1 2 3) asSet joinSeparatedBy: '-'? For such scenarios, some people argued, it would be better to explicitely call #asArray and maybe explain why a non-sequenceable collection was used in the first place."
- "Returns a string, which is a concatenation of each element's string representation separated by another string."
^ String streamContents: [:stream |
+ self joinOn: stream separatedBy: aSeparator]!
- self
- do: [:ea | stream nextPutAll: ea asString]
- separatedBy: [stream nextPutAll: aSeparator asString]]!
More information about the Squeak-dev
mailing list
|