%s[ I think %s[] should build an array of symbols instead of a single symbol ]

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}:

p %w[ I think this should build an array of symbols ].map {|x| x.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. And I think the demand for an array of symbols is more frequent
than a single sentence-like symbol.

Maybe %s[] should be changed, like %w[], not %q[]. Anyone think so?

···

--
Posted via http://www.ruby-forum.com/.

and so everyone elses programs :slight_smile:

check if %S is unused...

···

On Sat, Mar 5, 2011 at 6:33 PM, Joey Zhou <yimutang@gmail.com> wrote:

Maybe %s should be changed, like %w, not %q. Anyone think so?

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

···

On Sat, Mar 5, 2011 at 11:33 AM, Joey Zhou <yimutang@gmail.com> wrote:

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

botp wrote in post #985687:

and so everyone elses programs :slight_smile:
check if %S is unused...

If %s builds array of symbols, it will save numerous
"colon-comma-colon-comma..." :slight_smile:

···

--
Posted via http://www.ruby-forum.com/\.