认为红宝石中缺少方法是否可疑?

时间:2011-08-31 08:16:28

标签: ruby class methods instance

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}}类,ClassPerson都有相同数量的方法。

现在让我们实例化Class

Person

如果a = Person.new puts a.methods.count #=> 42 methods a的实例,那么为什么Person中的方法数量少于a。怎么了 ?一些方法怎么会丢失?它们首先不是遗传的吗?如果是这样的话?

2 个答案:

答案 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