diff options
| author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-01-23 09:34:04 +0000 |
|---|---|---|
| committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-01-23 09:34:04 +0000 |
| commit | fa9893a9cc7eb6137309a87654ba603e82cff22b (patch) | |
| tree | 74b5b7b6fb7c4bff676933d02e05304db549bb91 /hash.c | |
| parent | 76bdb346bc99674c092e5fa6ad6415e27e000ed5 (diff) | |
| download | ruby-fa9893a9cc7eb6137309a87654ba603e82cff22b.tar.gz ruby-fa9893a9cc7eb6137309a87654ba603e82cff22b.tar.xz ruby-fa9893a9cc7eb6137309a87654ba603e82cff22b.zip | |
* hash.c: added documentation for Hash about how it uses eql? and
hash methods for the keys. [ruby-core:09995]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@11567 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'hash.c')
| -rw-r--r-- | hash.c | 34 |
1 files changed, 33 insertions, 1 deletions
@@ -2414,7 +2414,39 @@ env_update(env, hash) * Hashes have a <em>default value</em> that is returned when accessing * keys that do not exist in the hash. By default, that value is * <code>nil</code>. - * + * + * <code>Hash</code> uses <code>key.eql?</code> to test keys for equality. + * If you need to use instances of your own classes as keys in a <code>Hash</code>, + * it is recommended that you define both the <code>eql?</code> and <code>hash</code> + * methods. The <code>hash</code> method must have the property that + * <code>a.eql?(b)</code> implies <code>a.hash == b.hash</code>. + * + * class MyClass + * attr_reader :str + * def initialize(str) + * @str = str + * end + * def eql?(o) + * o.is_a?(MyClass) && str == o.str + * end + * def hash + * @str.hash + * end + * end + * + * a = MyClass.new("some string") + * b = MyClass.new("some string") + * a.eql? b #=> true + * + * h = {} + * + * h[a] = 1 + * h[a] #=> 1 + * h[b] #=> 1 + * + * h[b] = 2 + * h[a] #=> 2 + * h[b] #=> 2 */ void |
