Hi,

All symbols are interned in the Symbol table. If one does (#foo , #bar , #baz) and each returned value would be a symbol, then both #foobar and #foobarbaz would be registered in the symbol table.

I would guess that's why the concatenated value is a string and not a symbol, to avoid registering many unused symbols. But maybe I am wrong.

If for your use case you need to concatenate symbols and get a symbol out of it, you can define a new method in Symbol to do what you want.

For example:

Symbol >> ,, arg
^ (self , arg) asSymbol

Then

#foo ,, #bar��

Answers directly the symbol #foobar.

Best,




On Sat, Mar 4, 2017 at 11:36 AM, Peter Uhnak <i.uhnak@gmail.com> wrote:
Hi,

why is the concatenation of symbols a string?

e.g. #desc, #Name -> 'descName'

this means that I have to always wrap in parentheses and recast, or stream it, e.g.

(#desc, #Name) asSymbol -> #descName
Symbol streamContents: [ :s | s << #desc; << #Name ] -> #descName

both of which introduce extraneous syntactical clutter.
The technical reason seems to be ByteSymbol>>#species returning ByteString, but I have no idea why it has to be this complicated.

Thanks,
Peter