根据定义,equal?检查两个对象是否相同,eql?检查类是否相同且值是否相同.
x = 'hi'
y = 'hi'
x.equal? y # => false
x.eql? y # => true
x = 1
y = 1
x.equal? y # => true
x.eql? y # => true
Run Code Online (Sandbox Code Playgroud)
为什么是第二个x.equal? y true?不是x和y两个实例Fixnum?为什么它不适用于Fixnum/ Float如上面的例子所示?
因为x并且y实际上是指完全相同的对象.与字符串不同,每个整数值在任何给定时间只有一个实例.
参考:http://ruby-doc.org/core-2.2.1/Fixnum.html
对于任何给定的整数值,实际上只有一个Fixnum对象实例[...]
编辑:为了使其更清晰,您可能需要查看这些对象的object_id:
irb(main):001:0> x = 1
=> 1
irb(main):002:0> y = 1
=> 1
irb(main):003:0> x.object_id
=> 3
irb(main):004:0> y.object_id
=> 3 # Same ID as above
irb(main):005:0> x = 'hi'
=> "hi"
irb(main):006:0> y = 'hi'
=> "hi"
irb(main):007:0> x.object_id
=> 70287051883000
irb(main):008:0> y.object_id
=> 70287051869720 # Different ID than X
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |