From: Rein Henrichs on
On 2010-06-13 11:30:40 -0700, Chuck Brotman said:

> Hi,
>
> I want to print an array (of strings, mostly) with commas separating the
> elements (so it would look like the result in the irb
>
> a =[one,two,three]
> printspecial a # should produce "[one, two, three]" not "onetwothree"
> as it # currently does
>
>
> I tried a.map{|s| s.to_s + ", "
> but this gives me [one, two, three,]
> with an extra comma trailing the last element
>
> Is there a nice ruby idiom to do what I want (or to simply produce the
> necessary string for printing?
>
> Or, do I have to resort to an explicit loop checking for the last
> element and not alter it?

If you want it to "look like the result in the irb", you want Array#inspect.
--
Rein Henrichs
http://puppetlabs.com
http://reinh.com

From: Chuck Brotman on
I tried it and that appears to be exactly what I need!!

Thank you very much!!!

Brian Candler wrote:
>
> You want String#inspect. (irb calls #inspect on the object it's
> displaying)
>
> $ irb --simple-prompt
>>> a = ["one","two","three"]
> => ["one", "two", "three"]
>>> puts a.inspect
> ["one", "two", "three"]
> => nil

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

From: Chuck Brotman on
".inspect", ".join", "*". Of course, there isn't just one way to get
the job done in Ruby!

I appreciate all the tips


Thanks,

Chuck

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

From: Rein Henrichs on
On 2010-06-17 20:08:32 -0700, Chuck Brotman said:

> ".inspect", ".join", "*". Of course, there isn't just one way to get
> the job done in Ruby!
>
> I appreciate all the tips
>
>
> Thanks,
>
> Chuck

Well, Array#inspect makes use of behavior identical to that of
Array#join. You could* implement it as:

class Array
def inspect
'[' << map{|item| item.inspect}.join(', ') << ']'
end
end

Also, Array#join and Array#* are synonyms. So there's way closer to one
way than to many. ;)

* this naive implementation fails on recursive arrays and is less
efficient than the one used by Rubinius**, which combines the #map and
#join into a single #each:
http://github.com/evanphx/rubinius/blob/master/kernel/common/array.rb#L915-926

**

Rubinius source-diving is a great way to find out a Ruby reference
implementation for something written in C in MRI or YARV Rubies.
--
Rein Henrichs
http://puppetlabs.com
http://reinh.com