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.uh...@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 > >