raja / cs.indiana.edu (Raja S.) writes:

>I'm coming to Ruby with a Python & Common Lisp background.

>1.  is there a builtin way to print an array so that it looks like an array?
>    a=[1,2,3,4]
>    print??? a        # should print [1,2,3,4]
>    Equivalently for hashes?
>    I'm looking for the equivalent array/hash printing behavior of Python.

I answer to part of my earlier post I've come up with the following using
Ruby's neat ability to extend the functionality of builtin types/classes:

class Array
  def to_s ()
    ans=""
    for i in (0...self.length-1)
      ans += self[i].to_s + ", "
    end
    ans += self[-1].to_s if (self.length>0)
    return "[" + ans + "]"
  end
end

I take it there is no pre-defined way then?

Raja


p.s.  My first attempt was to use a sub-array rather than index over a
range.  

class Array
  def to_s ()
    ans=""
    for e in self[0..-2]
      ans += e.to_s + ", "
    end
    ans += self[-1].to_s if (self.length>0)
    return "[" + ans + "]"
  end
end

I suppose indexing over a range may be more efficient space wise than the
copying involved in creating a sub array.  Hence the earlier version may be
preferable.  But leaving that aside, self[0..-2] returns nil for an empty
array and 'each' isn't defined on nil.  One may have expected

    for e in self[0..-2]
       ...

to work even for empty arrays.  Caught me by surprise.