== || eql? || equal?

== || eql? || equal?

这是我在几月前发现一个比较有趣的地方,查看下列代码:

[Copy to clipboard] [ - ]
感谢分享如此好的文章,不然我还一直以为equal?是eql?的另一个名称呢。呵呵。

我想以我为代表的“Ruby新手“就需要这样的小CASE文章才指点一下。谢谢您,Yudi。
这个。。。 skyover太谦虚了
其实我才是新新手。。。 很感谢在这个时候提供一个如此好的交流平台,让我不至于有话没处说太郁闷
这个礼拜忙着弄 yudionrails.com, 改天把发布的经验整理一下放上来。
刚去看了你的Blog,看起来还不错,就是没写完吧。呵呵。

现在是不是很流行xxx on rails这样的域名?哈哈。我也去注册一个。
还行,连我的名字念起来还挺上口。 还没写完,差老远呢
别都跑了呀,我们这里有个人空间的。
哥几个,回来!哈哈!

我说,Yudi闷着干吗呢?原来呀...开小灶呢...
感觉和java的用法正好相反,java中equal方法是用来笔记对象的值,==比较的是对象的引用地址,也可以说是object_id

Ruby中,eql?方法和==方法比较的是对象的值,而equal?则是比较对象的引用地址。。。我还以为eql?是equal?的缩写方法呢,原来有这样的区别,感谢分享。。。
………………

这个programming ruby上面刚开始没多久的时候就有说的,==是判断是值,相当于java里面的equal;eql?()判断的是值以及类型;equal?()判断的是地址。

[Copy to clipboard] [ - ]

==       Test for equal value.

===      Used to compare each of the items with the target in the when clause of a case statement.

<=>      General comparison operator. Returns −1, 0, or +1, depending on
        whether its receiver is less than, equal to, or greater than its argument.

<, <=, >=, > Comparison operators for less than, less than or equal, greater than or
        equal, and greater than.

=~       Regular expression pattern match.

eql?      True if the receiver and argument have both the same type and equal
        values. 1 == 1.0 returns true, but 1.eql?(1.0) is false.

equal?     True if the receiver and argument have the same object ID.
结论:equal? 就是 C# 里的 Object.ReferenceEquals方法,确认是否引用相等。