[#3109] Is divmod dangerous? — Dave Thomas <Dave@...>

14 messages 2000/06/06

[#3149] Retrieving the hostname and port in net/http — Roland Jesse <jesse@...>

Hi,

12 messages 2000/06/07

[#3222] Ruby coding standard? — Robert Feldt <feldt@...>

16 messages 2000/06/09

[#3277] Re: BUG or something? — Aleksi Niemel<aleksi.niemela@...>

> |I am new to Ruby and this brings up a question I have had

17 messages 2000/06/12
[#3281] Re: BUG or something? — Dave Thomas <Dave@...> 2000/06/12

Aleksi Niemel<aleksi.niemela@cinnober.com> writes:

[#3296] RE: about documentation — Aleksi Niemel<aleksi.niemela@...>

> I want to contribute to the ruby project in my spare time.

15 messages 2000/06/12

[#3407] Waffling between Python and Ruby — "Warren Postma" <embed@...>

I was looking at the Ruby editor/IDE for windows and was disappointed with

19 messages 2000/06/14

[#3410] Exercice: Translate into Ruby :-) — Jilani Khaldi <jilanik@...>

Hi All,

17 messages 2000/06/14

[#3415] Re: Waffling between Python and Ruby — Andrew Hunt <andy@...>

>Static typing..., hmm,...

11 messages 2000/06/14

[#3453] Re: Static Typing( Was: Waffling between Python and Ruby) — Andrew Hunt <andy@...>

32 messages 2000/06/16

[#3516] Deep copy? — Hugh Sasse Staff Elec Eng <hgs@...>

Given that I cannot overload =, how should I go about ensuring a deep

20 messages 2000/06/19

[#3694] Why it's quiet — hal9000@...

We are all busy learning the new language

26 messages 2000/06/29
[#3703] Re: Why it's quiet — "NAKAMURA, Hiroshi" <nahi@...> 2000/06/30

Hi,

[#3705] Re: Why it's quiet — matz@... (Yukihiro Matsumoto) 2000/06/30

Hi,

[ruby-talk:03339] Re: BUG or something?

From: Mathieu Bouchard <matju@...>
Date: 2000-06-12 15:22:46 UTC
List: ruby-talk #3339
> |Question, how does Hash computes the hash value of a String? or of any
> |object?
> By invoking `hash' method of key object.

well, not exactly. ts said:

> See the method hash
> Apparently ruby call the method hash for each object, except for T_FIXNUM
> (it return the value) and T_STRING (rb_str_hash)
> In 1.5 rb_str_hash is different than 1.4 (see #ifdef)

well, I've taken a look, and it seems that there is a performance hack: 
"hash" is called directly on a String, just like "ts" said. If it wasn't a
special case, then the following program would work. (that is, unless my
program has bugs)

--------8<----------------cut-here----------------8<--------istring.rb

class IString < String
	def == (other); upcase == other.upcase; end
	def eql? (other); upcase.eql?(other.upcase); end
	def hash; upcase.hash; end
end

print "$a = ";p $a = "foo"
print "$b = ";p $b = $a.upcase
print "$c = ";p $c = IString.new($a)

print "$c == $a : ";p $c == $a
print "$a == $c : ";p $a == $c
print "$c == $b : ";p $c == $b
print "$b == $c : ";p $b == $c

print "$a.hash == ";p $a.hash
print "$b.hash == ";p $b.hash
print "$c.hash == ";p $c.hash

$H = {}
$H[IString.new("unf")]=1;
$H[IString.new("UNF")]=2;
$H[IString.new("DOH")]=3;
$H[IString.new("doh")]=4;

p $H

--------8<----------------cut-here----------------8<--------end

btw, my error for not seeing the documentation for "hash". 
I was looking in String but it's documented in "Object". :-)



Mathieu Bouchard



In This Thread

Prev Next