Hello Chris,

> So, on to Ruby. This whole issue is not a problem due to 
> garbage collection

Well, mostly right. You should note, however, that these things (who own the
object) relate also to delicate issues of concurrency and persistence.

> ... so which way would be the "Right Way" to do this? I'm 
> leaning towards the original design:

Humm.. let me think about this as I haven't monitored actively myself for
certain patterns.

For your examples I'd give comment anyway,

> # newbie alert <g>
> def parseString(aString, aDelimiter)
>   strings = Array.new
>   # do stuff I haven't learned yet
> end
> 
> v.
> 
> def parseString(aString, aDelimiter, aArray)
>   # do stuff I haven't learned yet
> end

first version is actually more like

  def createAnArrayAndPopulateWithStringParts( string, delimiter); end

while the second

  def addStringPartsToAnExistingArray( string, delimiter, array); end

Now, for me it seems the first is more utilitaristic, and does more than the
second. The second, could be used as a part of the first.

The second is, however, more complex in terms of parameters (and maybe a
check you got right parameters). So to make the point clearer, I'd like to
move out from functional world and enter the OO-world:

rearrange parameters
  ->  def addStringPartsToAnExistingArray( array, string, delimiter); end

wrap to a class, and simplify name

  class MyStringParts
    attr_reader :ary
    def initialize(ary = [], delim = /\s+/)
      @ary, @delim = ary, delim
    end
    def add( string )
      @ary.concat string.split(@delim)
    end
  end

And suddenly the complexity goes away. So I guess it's all about having a
proper tool for proper use.

	- Aleksi