關於ruby的methods、instance_methods、method三者的區別

來源:互聯網
上載者:User
class A    def self.ask1        puts "the method of class"    end    def ask2        puts "the method of instance"    endend

#類的執行個體對象的方法,方法屬於類所產生New出來的執行個體對象。
p a.methods.length
p a.class.instance_methods.length
p A.instance_methods.length
p a.public_methods.length
p a.class.public_instance_methods.length
輸出:50

說明上面5種方式都是輸出執行個體對象的方法

#增加a執行個體的單件方法

def a.tellendp a.methods.lengthp a.class.instance_methods.lengthp A.instance_methods.lengthp a.public_methods.lengthp a.class.public_instance_methods.length

 輸出:51 50 51 50
說明:類的instance_methods包括的只有他所擁有的執行個體方法,並不包含單件類的方法。並且methods方法其實和Public_methods一樣的,有別於private_methods

#類的方法,方法屬於類自己
p A.methods.length
p A.class.instance_methods.length
p A.public_methods.length
p A.class.public_instance_methods.length

輸出:87 86 87 86

註:這雷根據版本不同,1.8.6和1.9.2是有差別的。

現在說一下,method方法

這個方法屬於Method類,最常用的就是檢查方法的參數個數,如下:

class A    def self.ask1(n1,n2)        puts "the method of class"    end    def ask2(n1)        puts "the method of instance"    endenda=A.newp a.method(:ask2).arityp A.method(:ask1).arity

 輸出:1 2

這裡不拘泥於所有方法的介紹,介紹的是比較常用的方法。

相關文章

聯繫我們

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