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

Discussion in 'Ruby' started by Joey Zhou, Mar 5, 2011.

  1. Joey Zhou

    Joey Zhou Guest

    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, :eek:f, :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/.
     
    Joey Zhou, Mar 5, 2011
    #1
    1. Advertising

  2. Joey Zhou

    botp Guest

    On Sat, Mar 5, 2011 at 6:33 PM, Joey Zhou <> wrote:
    > Maybe %s[] should be changed, like %w[], not %q[]. Anyone think so?


    and so everyone elses programs :)

    check if %S is unused...
     
    botp, Mar 6, 2011
    #2
    1. Advertising

  3. Joey Zhou

    Joey Zhou Guest

    Re: %sshould build an array of symbols instead of a single symbol ]

    botp wrote in post #985687:
    > and so everyone elses programs :)
    > check if %S is unused...


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

    --
    Posted via http://www.ruby-forum.com/.
     
    Joey Zhou, Mar 6, 2011
    #3
  4. 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, :eek:f, :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/
     
    Robert Klemme, Mar 8, 2011
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.

Share This Page