literal quote in an array?

Discussion in 'Ruby' started by Simon Schuster, Sep 24, 2007.

  1. using colons for now, but would like to somehow encapsulate a sentence
    in this way (basically), with quotes.

    speaker = ["joe ", "betty "]
    expression = ["said: ", "replied: ", "stated: "]
    content = ["hello.", "bye."]

    053:0> sentence = speaker[0] + expression[1] + content[0]
    "joe replied: hello."
    but I'd like to get:
    "joe replied, "hello.""

    Simon Schuster, Sep 24, 2007
    1. Advertisements

  2. Simon Schuster

    Tim Hunter Guest

    Tim Hunter, Sep 24, 2007
    1. Advertisements

  3. This can work if you do not have strange characters in the content:
    sentence = speaker[0] + expression[1] + content[0].inspect

    This is better:
    sentence = speaker[0] + expression[1] + "\"#{content[0]}\""
    Gaspard Bucher, Sep 24, 2007
  4. I'd do it like this:
    speaker = %w(joe betty)
    expression = %w(said replied stated)
    content = %w(hello. bye.)
    sentence = "#{speaker[0]} #{expression[1]}, #{content[0].inspect}"

    If using inspect feels too hackish to you, you could use \"#{content[0]}\"

    Sebastian Hungerecker, Sep 24, 2007
  5. Or better still:

    sentence = %{#{speaker[0]} #{expression[1]} "#{content[0]}"}

    Then you don't need the extra spaces in the speaker and expression


    Rob Biedenharn
    Rob Biedenharn, Sep 24, 2007
  6. excellent, thank you

    Simon Schuster, Sep 24, 2007
  7. Simon Schuster

    Phrogz Guest

    Seeing what you're doing, I thought I'd show you my "String#variation"
    method, that allows you to write a generic sentence like this:
    q = "(How (much|many)|What) is (the (value|result) of)? "
    and generate random variations on it via:

    If you have variables you want to substitute into the string, you can
    either do that during construction (if they never change):
    q = "(Hello|Howdy), #{name}"
    or you can substitute the name variable on the fly:
    q = "(Hello|Howdy), :name"
    greeting = q.variation( :name=>"Bob" )

    I wrote this code for my solution to Quiz #48 [1], and have only ever
    used it there, but it's reasonably simple and seems solid enough.

    class String
    def variation( values={} )
    out = self.dup
    while out.gsub!( /\(([^())?]+)\)(\?)?/ ){
    ( $2 && ( rand > 0.5 ) ) ? '' : $1.split( '|' ).random
    }; end
    out.gsub!( /:(#{values.keys.join('|')})\b/ ){ values[$1.intern] }
    out.gsub!( /\s{2,}/, ' ' )

    Perhaps you will find it useful.

    Phrogz, Sep 24, 2007
  8. Simon Schuster

    Phrogz Guest

    Oops, I forgot that this relies on having:

    class Array
    def random
    self[ rand( self.length ) ]
    Phrogz, Sep 24, 2007
    1. Advertisements

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.