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
這裡不拘泥於所有方法的介紹,介紹的是比較常用的方法。