Quoteing dblack@wobblini.net, on Mon, Nov 15, 2004 at 09:00:18AM +0900:
> I'd like to mix a little bit more of Array into Struct!
You can do that (just write a module and extend your Structs), though
in general I think Structs are more hash-like than array-like. If
there's a # method, I wouldn't expect it to be restricted to
integers. (Is the order of #to_a for Structs even guaranteed?)
Aha, so I expected it be more like an Array, and you expected it to be
more like a Hash! But, it is not quite either. 
You can index by symbols (hash-like), or by integer (array-like).
Pickaxe has examples of using integer indexes that rely on
the ordering, for both # and #to_a, so I'm assuming it's intended to
be guaranteed. From ri1.8:
Returns the values for this instance as an array.
Customer = Struct.new(:name, :address, :zip) joe = Customer.new("Joe
Smith", "123 Maple, Anytown NC", 12345)
joe.to_a[1] #=> "123 Maple, Anytown NC"
(Tangential question:
How does one refer to the methods one defines on a Struct, or for that
matter its other instance methods? The usual ClassName#method_name
thing doesn't work 
The thing Struct.new returns is enough of a class, isn't it?
irb(main):001:0> s = Struct.new('MyClass', :foo, :bar)
=> Struct::MyClass
irb(main):002:0> s.methods
=> ["send", "name", "display", "class_eval", "object_id",
...
Cheers,
Sam