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
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
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-forum.com/\.
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-talk/336430
···
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
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-talk/336430
Huh, odd. Bug in Ruby-forum, then, I guess. Sorry.
( Why Fixnum===Fixnum is false? - Ruby - Ruby-Forum )
···
--
Posted via http://www.ruby-forum.com/\.
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-talk/336430
Huh, odd. Bug in Ruby-forum, then, I guess. Sorry.
( Why Fixnum===Fixnum is false? - Ruby - Ruby-Forum )
Hm, it probably thought everything below the last hline was a sig.
···
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407