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