我是否正确理解Ruby中的对象?

时间:2011-10-14 00:56:58

标签: ruby oop object

我觉得这对于我对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 个答案:

答案 0 :(得分:6)

您的对象是运行Person.new结果,您已在person_instance中捕获该内容。

在ruby中,属性在第一次写入之前实际上并不存在,因此在person_instance.firstname = "Bob"之前,您的实例没有属性。执行此语句后,它具有@firstname属性,但没有其他属性。

答案 1 :(得分:0)

你是对的。红宝石中的一切都是一个对象。因此,当您创建一个新类'person'时,它本身就是类类的对象。

答案 2 :(得分: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