class Person
def name
puts "Doharey"
end
end
puts Person.class #=> this out puts Class
puts Class.methods.count #=> 82 methods
puts Person.methods.count #=> 82 methods
在上面的示例中,创建了一个继承自Person
的{{1}}类,Class
和Person
都有相同数量的方法。
现在让我们实例化Class
类
Person
如果a = Person.new
puts a.methods.count #=> 42 methods
是a
的实例,那么为什么Person
中的方法数量少于a
。怎么了 ?一些方法怎么会丢失?它们首先不是遗传的吗?如果是这样的话?
答案 0 :(得分:2)
a.methods
是实例方法和
Person.methods
是类方法。它们不共享相同的命名空间。在name
上定义Person
时,您正在定义实例方法。
class Person
def self.name
puts "Doharey"
end
end
=> nil
Person.methods.count
=> 113
Class.methods.count
=> 114
这里我定义了一个类方法,它也显示在方法列表中。
答案 1 :(得分:1)
class Person
def name
puts "Doharey"
end
end
我们新课程中有多少个实例方法?
Person.instance_methods.size
# => 72
列出类的所有实例方法,不包括从超类继承的任何方法:
Person.instance_methods(false)
# => [:name]
每个新类默认为Object的子类:
Person.superclass
# => Object
超类中有多少个实例方法?
Object.instance_methods.size
# => 71