On May 23, 3:41 am, Robert Klemme <shortcut... / googlemail.com> wrote:
<snip>
> Make clear what you actually want.  You could also show some code.

Sorry for the confusion.  I was trying to be considerate and brief,
but apparently I was only obscure.

I want a Hash-like object that instead of calling each object's #hash
method to get its hash value, calls another to-be-specified method.  I
probably want to specify an alternative to #eql? as well.  Again, this
is parallel to the way the standard library Enumerator class creates
an Enumerable-like object with an alternative #each method.

One use cases is uniqueness.

# existing array with a bunch of complex objects
my_array = [...]

# find unique objects using normal #hash and #eql? methods;
# yes, I know Array#uniq does this -- it's an example
normal_uniq_hash = Hash.new
my_array.each {|obj| normal_uniq_hash[obj] = obj}
# now normal_uniq_hash can be iterated to get the unique objects from
my_array

# find "unique" objects using different #hash and #eql? methods
alt_uniq_hash = AltHash.new(:alt_hash, :alt_eql?)  # postulating a new
AltHash
my_array.each {|obj| alt_uniq_hash[obj] = obj}
# now alt_uniq_hash can be iterated to get the "unique" objects from
my_array

Is this more clear?

Thanks for your help!