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