From: Robert Klemme Date: 2011-03-08T19:17:54+09:00 Subject: Re: %s[ I think %s[] should build an array of symbols instead of a single symbol ] On Sat, Mar 5, 2011 at 11:33 AM, Joey Zhou wrote: > I find %s[] builds a single symbol. > > p %s[ I think this should build an array of symbols ] > => :" I think this should build an array of symbols " > > It even costs one more keystroke than :"", so it has no effect to make > fingers happy. If the purpose of %s[] is to avoid quotation mark > confusion, I think %q[].to_sym is enough, and more flexible: %Q[].to_sym > works too (well, there's no %S[]). > > what = "an array of symbols" > p %Q[ I think this should build #{what} ].to_sym > p %q[ I think this should build an array of symbols ].to_sym > > If I want an array of symbols, I can use %w[].map {|x| x.to_sym}: Or even irb(main):004:0> %w[ I think this should build an array of symbols ].map &:to_sym => [:I, :think, :this, :should, :build, :an, :array, :of, :symbols] > But I think .map {|x| x.to_sym} is more expensive than .to_sym, because > .map changes so many elements while .to_sym only changes a single > object. I am not sure what you mean by that. The code with #map uses #to_sym in a loop so both are involved. On the other hand %s... does not use to_sym at all I believe. Also, expensiveness only matters if you execute the code really frequently. An Array of Symbols sounds like something one would create once and store it in a class constant for example - so no need to worry about efficiency here. > And I think the demand for an array of symbols is more frequent > than a single sentence-like symbol. But the demand for Symbols containing whitespace and other special characters might be even higher than the demand for an Array of Symbols. > Maybe %s[] should be changed, like %w[], not %q[]. Anyone think so? Maybe, I don't. Cheers robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/