On Thu, 22 Feb 2001, Dave Thomas wrote: > David Alan Black <dblack / candle.superlink.net> writes: > > > I guess h.each_with_index is, in effect, shorthand for > > h.entries.each_with_index, since the data structure that's being > > indexed is not the hash but the array returned by Hash#entries. > > I think it could also be the other way around: each_with_index returns > key/value pairs out of the hash, and #to_a performs an (artificial) > flattening on the hash into an array. But what does each_with_index add, functionally, to Hash, given that we already have Hash#each? What use is it for a hash to assign, in random order, numerical indices to its key/value pairs? I can't help wondering if this is a case where Enumerable is casting slightly too wide a net. If implementing each_with_index were left to the mixing-in classes -- and then not implemented in Hash -- I wonder whether anyone using Hash would miss it. (In this connection, note that Hash doesn't implement each_index.) > Internally, hashes are not arrays, they're.... hashes. I don't mean to suggest that hashes are arrays; I just find the array/hash, index/key analogies helpful as a way of pinpointing what I perceive as the extraneousness of Hash#each_with_index. One could also ignore arrays and simply ask: given that a hash is an unordered collection of key/value pairs, what useful or even meaningful role can numerical indexing play? > If we've saying that anything that can be indexed is an array, then I > guess we should include files, directories, strings, ... Similarly is > we're saying that anything with keys is a Hash. Not a Hash -- but perhaps Hashable, the name of my pet non-existent module :-) Maybe it should be called Keyable, so as not to make it too Hash-bound. I see the keyedness of hashes and arrays, not as meaning that one of the two is the "real" one and the other a derivative, but as something they share. In spite of the non-existence of the module, I find their common keyability (or whatever) as central and as compelling as their common enumerability -- which is why I keep coming back to it, I guess. David -- David Alan Black home: dblack / candle.superlink.net work: blackdav / shu.edu Web: http://pirate.shu.edu/~blackdav