2011-10-14 82 views
4

我覺得這是我理解Ruby和麪向對象編程的基礎,所以我在這裏提出了一個相當簡單的問題,冒着看起來愚蠢的風險。我一直在與irb玩弄。我創造了我的第一堂課:我是否正確理解Ruby中的對象?

$ 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和我爲該類定義的屬性的組合?

+2

從技術上講,他們都是對象。 'Person.new'是'Person'類的一個實例。 – numbers1311407

+1

+1儘管面臨愚蠢的風險,但仍有膽量提問。 「唯一愚蠢的問題就是沒有被問到的問題」有句話要說...... –

+1

一般來說,大多數人都會調用類對象,因爲對象通常被稱爲類的實例。我寧願讓人們在引用類時說「class」,並且反對實例化的實例。 – Candide

回答

6

你的目標是運行Person.new,您已在person_instance捕獲的結果

在ruby中,屬性在第一次寫入之前並不存在,因此在person_instance.firstname = "Bob"之前,您的實例沒有屬性。執行此語句後,它具有@firstname屬性,但沒有其他屬性。

0

你說得對。紅寶石中的一切都是一個對象。所以當你創建一個新的類「person」時,它本身就是一個class類型的對象。

+0

你的意思是「新班」人「本身......」? –

+0

@AndrewGrimm是的,這就是我的意思! – rb512

0

字符串也是對象,所以以後你做

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