You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Bryan Duxbury (JIRA)" <ji...@apache.org> on 2008/12/12 00:11:44 UTC

[jira] Updated: (THRIFT-231) Ruby generated structs lack a hash method, and thus cannot be used as map keys or set members

     [ https://issues.apache.org/jira/browse/THRIFT-231?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Bryan Duxbury updated THRIFT-231:
---------------------------------

    Attachment: thrift-231.patch

Here's a patch that seems to solve the problems for me. What I've done is remove the class equality check from the == method, added a eql? method that includes the class equality check and calls ==, and a placeholder hash method. This fixes Set operations in my limited testing.

> Ruby generated structs lack a hash method, and thus cannot be used as map keys or set members
> ---------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-231
>                 URL: https://issues.apache.org/jira/browse/THRIFT-231
>             Project: Thrift
>          Issue Type: Bug
>          Components: Compiler (Ruby), Library (Ruby)
>            Reporter: Bryan Duxbury
>            Assignee: Bryan Duxbury
>         Attachments: thrift-231.patch
>
>
> Since generated structs don't define a hash method in Ruby, it defaults to a unique number every time. This means that even if two objects have equal values, they will not have equal hashcodes. As a result, if you try to create a set of these structs and subsequently attempt to test membership on an equal struct, it'll always return false. The same problem prevents structs from being used as map keys.
> At the very least, we should define a hash method that always returns 0 and leave it up to the chaining to resolve the problem. A slightly more appropriate move would be to have the hashcode of a struct be the composition of its member values.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.