|
Paul Chiusano wrote:
I would like to store objects in a set, where the set is implemented by a table mapping the objects to either true or nil, depending on whether they are present or not. In order for this to work, I need equal objects (according to __eq) to hash to the same location in the table.
I can think of a couple ways to get around this. One is to make it so that equal objects actually are the same table. If you do this, you won't even need an __eq metamethod. An example of this is given in Programming in Lua 17.1: <http://www.lua.org/pil/17.1.html> The other way is to make your own "hash" function that translates equal objects to the same string and unequal objects to different strings. Then you use the strings (instead of the objects) as keys and the objects (instead of true) as values. This approach is actually used in the Lua book to implement the memoization needed by the previous approach. -- Aaron