ruby中的alias和alias_method

來源:互聯網
上載者:User

標籤:style   blog   color   使用   ar   div   sp   代碼   log   

  ruby中的alias和alias_method都可以重新命名一個方法,它們的區別如下:

 

1.alias是ruby的一個關鍵字,因此使用的時候是alias :newname :oldname

   alias_method是Module類的一個方法,因此使用的時候是alias_method :newname,:oldname,有一個逗號。

 

2.alias的參數可以使用函數名或者符號,不能是字串。

   alias_method的參數可以是字串,或者符號。

如下代碼:

 1 class Array 2   alias :f1 :first 3   alias f2 first 4   alias_method :f3,:first 5   alias_method "f4","first" 6 end 7 p [1,2,3].f1 8 p [1,2,3].f2 9 p [1,2,3].f310 p [1,2,3].f4

輸出:

1
1
1
1

 

3.它們在下面一種情況下有區別。

 1 class A 2    3   def method_1 4     p "this is method 1 in A" 5   end 6    7   def A.rename 8     alias :method_2 :method_1 9   end10 end11 12 class B < A13   def method_114     p "This is method 1 in B"15   end16   17   rename18 end19 20 B.new.method_221 22
23 class A24   25   def method_126     p "This is method 1 in A"27   end28   29   def A.rename30     alias_method :method_2,:method_131   end32 end33 34 class B < A35 36   def method_137     p "This is method 1 in B"38   end39   40   rename41 end42 B.new.method_2

輸出是

"This is method 1 in A"
"This is method 1 in B"

   從結果可以看到,如果是alias_method,調用的是子類的方法,如果用的是alias,調用的是父類的方法。

ruby中的alias和alias_method

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.