From: Dave Burt Date: 2006-03-29T18:18:41+09:00 Subject: Re: strings and ruby style? Kev Jackson wrote: > My original goal was to allow the qc team to write > > text :id, :pg_401, :name > > So the arguments in theory should be symbols not strings, hence the need > for some kind of to_s/#{} hackery That's fair enough, though I'd prefer to either use strings or change the $test_data hash to avoid having to convert. For instance, you could use a HashWithIndifferentAccess from Rails' Active Support module (require 'active_support'), or you could just convert the keys to symbols as you load the data. > ... > However, coming from a Java background, "s1" + "s2" is a performance > (memory/speed) nightmare, so I shy away from S1 + S2 and try to use > #{S1}S2 where possible. Perhaps string + string isn't so bad in Ruby, but > old habits die hard... It's not so terrible in Java either; when you want to avoid it is where you're adding multiple times to get a single result string, especially in a big loop. Then you'd use a StringBuffer to avoid creating and garbage-collecting zillions of strings. Of course, Ruby's strings are mutable, so you don't need another class of object. Compare: s = ""; 50.times {|i| s += i.to_s + " "} # watch out: 50 strings are discarded with: s = ""; 50.times {|i| s << i.to_s << " " } # like Java's StringBuffer: one object, efficient Anyway, in this case, "#{x}y" is about the same as x + "y", because you're only creating one extra string. You've just got the added method-call overhead for String#+. > Thanks You're welcome. Cheers, Dave