[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Why Fixnum===Fixnum is false?

Heesob Park

5/13/2009 1:19:00 AM

Hi,

I noticed the following behaviour.

irb(main):001:0> a = 1
=> 1
irb(main):002:0> a.class
=> Fixnum
irb(main):003:0> a.class == Fixnum
=> true
irb(main):004:0> a.class === Fixnum
=> false
irb(main):005:0> Fixnum === Fixnum
=> false
irb(main):006:0> a === Fixnum
=> false
irb(main):007:0> Fixnum === a
=> true

As a result:

case 1
when Fixnum
puts 'Fixnum'
else
puts 'else'
end
# => Fixnum

case 1.class
when Fixnum
puts 'Fixnum'
else
puts 'else'
end
#=> else

What is the reason Fixnum === Fixnum returns false?

Regards,
Park Heesob

5 Answers

Joel VanderWerf

5/13/2009 1:49:00 AM

0


Fixnum is not an instance of Fixnum. Compare:

------------------------------------------------------------- Object#===
obj === other => true or false

From Ruby 1.8
------------------------------------------------------------------------
Case Equality---For class Object, effectively the same as calling
#==, but typically overridden by descendents to provide meaningful
semantics in case statements.

------------------------------------------------------------- Module#===
mod === obj => true or false

From Ruby 1.8
------------------------------------------------------------------------
Case Equality---Returns true if anObject is an instance of mod or
one of mod's descendents. Of limited use for modules, but can be
used in case statements to classify objects by class.

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

Adam Gardner

5/13/2009 5:02:00 PM

0

Joel VanderWerf wrote:
> Fixnum is not an instance of Fixnum. Compare:
>
> ------------------------------------------------------------- Object#===
> obj === other => true or false
>
> From Ruby 1.8
> ------------------------------------------------------------------------
> Case Equality---For class Object, effectively the same as calling
> #==, but typically overridden by descendents to provide meaningful
> semantics in case statements.
>
> ------------------------------------------------------------- Module#===
> mod === obj => true or false
>
> From Ruby 1.8

Uh, I think you omitted the most important part of the documentation, to
whit, what it actually says about Module#===:

------------------------------------------------------------- Module#===
mod === obj => true or false
------------------------------------------------------------------------
Case Equality---Returns +true+ if _anObject_ is an instance of
_mod_ or one of _mod_'s descendents. Of limited use for modules,
but can be used in +case+ statements to classify objects by class.

(and incidentally, it is also important to know that the class 'Class'
does not define it's own #=== method, and so inherits from Module, which
is hinted at but not explicitly stated here)
--
Posted via http://www.ruby-....

Joel VanderWerf

5/13/2009 5:19:00 PM

0

Adam Gardner wrote:
> Joel VanderWerf wrote:
>> Fixnum is not an instance of Fixnum. Compare:
...
> Uh, I think you omitted the most important part of the documentation, to
> whit, what it actually says about Module#===:

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-t...

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

Adam Gardner

5/14/2009 12:01:00 AM

0

Joel VanderWerf wrote:
> Adam Gardner wrote:
>> Joel VanderWerf wrote:
>>> Fixnum is not an instance of Fixnum. Compare:
> ...
>> Uh, I think you omitted the most important part of the documentation, to
>> whit, what it actually says about Module#===:
>
> http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-t...

Huh, odd. Bug in Ruby-forum, then, I guess. Sorry.

( http://www.ruby-...topic/186... )
--
Posted via http://www.ruby-....

Joel VanderWerf

5/14/2009 12:32:00 AM

0

Adam Gardner wrote:
> Joel VanderWerf wrote:
>> Adam Gardner wrote:
>>> Joel VanderWerf wrote:
>>>> Fixnum is not an instance of Fixnum. Compare:
>> ...
>>> Uh, I think you omitted the most important part of the documentation, to
>>> whit, what it actually says about Module#===:
>> http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-t...
>
> Huh, odd. Bug in Ruby-forum, then, I guess. Sorry.
>
> ( http://www.ruby-forum.com/topic/186... )

Hm, it probably thought everything below the last hline was a sig.

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407