ruby 對象的比較總結

來源:互聯網
上載者:User

1、equal?

    我們經常要比較兩個對象,Ruby中提供了多種比較對象的方法。我們可以通過equal?方法比較兩個對象是否相同,通過這種方式是比較兩個值是否指向同一個對象的引用。比如:

a = "Ruby"       # 一個字串對象。    b = c = "Ruby"   # 兩個字串對象指向動一個引用。    a.equal?(b)      # false: a和b是不同的對象。    b.equal?(c)      # true: b和c指向同一個引用。

    這種比較方式實際上是比較兩個對象的ID是否相同,顯然a是一個對象,而b和c指向另一個對象,他們的對象ID是不同的:

a.object_id == b.object_id   # 等同於 a.equal?(b)

2、==來比較對象是否相等

    他的作用和equal?方法是不一樣,它比較的是兩個對象的內容是否相同:

     a = "Ruby" # 定義一個字串對象

b = "Ruby"    # 雖然和a的內容相同,但是他們是不同的對象    a.equal?(b)   # false: a和b指向不同的對象    a == b        # true: 他們的內容是相同的

     除了字串外,數組和字典類也定義了==操作符,如果兩個數組或兩個字典對象中元素個數相同,且每個元素都相同,那麼==返回true.

     Numerics對象在比較的時候會做一個簡單的最新轉換,所以Fixnum類型的1和Float類型的1.0的比較結果是相等。

     同樣,你可以使用!=來判斷兩個對象是否不等。

 

3、eql?方法

Ruby還提供了eql?方法,它與equal?的功能相同,是一種更精鍊的寫法。

 

4、三個等號的比較操作===

通常情況下這中方式與==是一樣的,但是在某些特定情況下,===有特殊的含義:

在Range中===用於判斷等號右邊的對象是否包含於等號左邊的Range;

Regex中用於判斷一個字串是否匹配模式,

Class定義===來判斷一個對象是否為類的執行個體,

Symbol定義===來判斷等號兩邊的符號對象是否相同。

(1..10) === 5 # true: 5屬於range 1..10
/\d+/ === "123"  # true: 字串匹配這個模式   String === "s"   # true: "s" 是一個字串類的執行個體   :s === "s"       # true 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.