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 H.
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
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)
Adam G. 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
Joel VanderWerf wrote:
Adam G. 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 )
Adam G. wrote:
( Why Fixnum===Fixnum is false? - Ruby - Ruby-Forum )
Hm, it probably thought everything below the last hline was a sig.