On Mon, Mar 6, 2017 at 5:54 PM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
Here is a concrete proposal:
https://pharo.fogbugz.com/f/cases/19802/Make-sure-Symbol- concatenation-results-in-a-Symbol-not-a-String
This gives the following assertions:
"Concatenating 2 symbols results in abother symbol" self assert: (#foo , #bar) == #foobar.
"Concatenating the empty symbol does not change a symbol" self assert: (#foo, emptySymbol) == #foo. self assert: (emptySymbol, #foo) == #foo.
"Strings and symbols can still be mixed, the receiver determines the result type" "Symbol receiver gives symbol result" self assert: (#foo , 'bar') == #foobar. "String receiver gives string result" self deny: ('foo' , #bar) == #foobar. self assert: ('foo' , #bar) equals: #foobar. self assert: ('foo' , #bar) equals: 'foobar'.
Those last two seem contradictory. cheers -ben
On 5 Mar 2017, at 19:53, Martin McClure <martin@hand2mouse.com> wrote:
On 03/05/2017 03:01 AM, Sven Van Caekenberghe wrote:
I also think that allowing concatenation on Symbols does not violate their immutability contract.
As a thought experiment, what could be the problem with adding
Symbol >> , arg ^ (self , arg) asSymbol
?
Aside from the infinite recursion (I suspect you meant super rather than self) :-) , I wouldn't have any problem with that.
(I have found the original issue raised annoying as well)
On 5 Mar 2017, at 11:35, Peter Uhnak <i.uhnak@gmail.com> wrote:
I don't need (or want) to mutate the receiver. Actually I thought that
String is also immutable.
$, could just return a new symbol instance instead. Concating symbols is quite practical for metaprogramming, as most things are named with symbols and compare by identity...
Somewhat unfortunately, imho, Smalltalk Strings are mutable. I've not seen this feature used often, except by internal operations that could just as well be using a CharacterBuffer or whatever would replace String as the mutable thing if you made String immutable.
Regards,
-Martin