Объявление класса - это средство для ухода за глазами в рубине?Все ли действительно объектно-ориентировано? - PullRequest
2 голосов
/ 31 августа 2011
class Person
  def name
   puts "Dave"
  end
end

puts Person.object_id

Существует только два способа доступа к методам:

1) Someclass.method в случае методов класса.#where Someclass - это класс.

2) и Object.method, когда доступ к методу является обычным методом, объявленным внутри класса.и Object является экземпляром класса.

Он соответствует шаблону Object.method, значит ли это, что класс Person действительно является объектом?

или object_id является методом класса?Последнее кажется маловероятным, поскольку методы класса не могут быть унаследованы в экземпляре.но когда мы делаем что-то вроде этого:

a = Person.new
a.methods.include?("object_id") # this produces true

a является экземпляром класса Person, поэтому object_id не может быть методом класса.

Ответы [ 2 ]

4 голосов
/ 31 августа 2011

Да, классы Ruby - это объекты:

>> String.is_a? Object
=> true
>> String.methods.count
=> 131
>> Fixnum.methods.count
=> 128
1 голос
/ 31 августа 2011

Да, классы в Ruby являются экземплярами класса Class. Фактически, вы можете создать тот же класс просто с помощью:

Person = Class.new do
  define_method :name do
    puts 'Dave'
  end
end

Затем вы можете просто набрать Person.new.name, и он будет работать точно так же, как ваш класс.

Проверить, что Person является экземпляром класса Class, так же просто, как набрать в своем ответе Person.class, и вы получите Class в ответ.

...