Правильно ли я понимаю объекты в Ruby? - PullRequest
4 голосов
/ 14 октября 2011

Мне кажется, это фундаментально для моего понимания Ruby и объектно-ориентированного программирования в целом, поэтому я задаю этот довольно упрощенный вопрос здесь, рискуя выглядеть глупо. Я играл с IRB. Я создал свой первый класс:

$ irb
ruby-1.9.2-p290 :001 > class Person
ruby-1.9.2-p290 :002?>   attr_accessor :firstname, :lastname, :gender
ruby-1.9.2-p290 :003?>   end
 => nil 
ruby-1.9.2-p290 :004 > person_instance = Person.new
 => #<Person:0x007f9b7a9a0f70> 
ruby-1.9.2-p290 :005 > person_instance.firstname = "Bob"
 => "Bob" 
ruby-1.9.2-p290 :006 > person_instance.lastname = "Dylan"
 => "Dylan"
ruby-1.9.2-p290 :007 > person_instance.gender = "male"
 => "male"

Итак, Person.new мой объект, верно? Или мой объект - комбинация class Person и атрибутов, которые я определил для этого класса?

Ответы [ 3 ]

6 голосов
/ 14 октября 2011

Ваш объект - результат выполнения Person.new, который вы захватили в person_instance.

В ruby ​​атрибуты фактически не существуют до тех пор, пока они не будут впервые записаны, поэтому до person_instance.firstname = "Bob" ваш экземпляр не имеет атрибутов. После выполнения этого оператора у него есть атрибут @firstname, но нет других.

0 голосов
/ 14 октября 2011

Строки также являются объектами, поэтому после того, как вы сделали

person_instance.firstname = "Bob"

, person_instance.firstname ссылается на строковый объект.Так что вы можете позвонить

# Returns String, indicating that the object returned by 
# person_instance.firstname is an instance of the String class.
person_instance.firstname.class 
# Returns a not very informative number, but indicates that it is its own object
person_instance.firstname.object_id
0 голосов
/ 14 октября 2011

Вы правы. Все в рубине это объект. Поэтому, когда вы создаете новый класс 'person', он сам является объектом типа class.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...