Подозрительно ли думать, что в ruby ​​пропадают методы? - PullRequest
1 голос
/ 31 августа 2011
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, который наследует от Class, и оба Person и Class имеют равное количество методов.

Теперь давайте создадим экземпляр Personclass

a = Person.new
puts a.methods.count #=> 42 methods

Если a является экземпляром Person, то почему число методов в a меньше, чем Person.Что просходит ?как некоторые методы пропадают?Разве они не унаследованы в первую очередь?Если так, то как?

Ответы [ 2 ]

2 голосов
/ 31 августа 2011
 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 голос
/ 31 августа 2011
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
...