背景简介
Ruby编程语言以其简洁和面向对象的特性而闻名。在Ruby的世界里,几乎一切皆对象。本书第七章详细讲解了如何在Ruby中定义类、创建对象以及管理对象的状态。掌握这些基础概念对于任何希望深入了解Ruby的开发者而言至关重要。
类与对象的定义
在Ruby中,类是对象的蓝图。一旦定义了类,我们便可以使用 new
方法来创建属于该类的实例。然而,仅使用 new
方法创建的实例并未存储任何特定的状态信息,它们是彼此完全相同的。
a_book = BookInStock.new
another_book = BookInStock.new
为了给每个实例赋予独特的状态,我们必须在类中定义一个初始化方法 initialize
。这个方法会在创建对象时自动调用,并且可以接收参数来设置对象的初始状态。
class BookInStock
def initialize(isbn, price)
@isbn = isbn
@price = Float(price)
end
end
属性的创建与访问
在Ruby中,对象的状态是通过实例变量来维护的,它们以 @
符号开始。为了从外部访问和修改这些实例变量,我们需要定义所谓的访问器方法(accessor methods),包括 attr_reader
、 attr_writer
和 attr_accessor
。
-
attr_reader
用于创建只读属性,允许外部读取实例变量的值。 -
attr_writer
用于创建只写属性,允许外部修改实例变量的值。 -
attr_accessor
则同时创建了读写属性,是这两个方法的快捷组合。
attr_reader :isbn
attr_accessor :price
对象的属性与方法
Ruby中的属性实际上是方法的特殊形式。通过定义方法,我们可以创建虚拟的属性,这些属性不一定对应着内部的实例变量。这种设计允许我们在不影响使用对象的其他代码的情况下,灵活地改变对象的内部实现。
def price_in_cents
(price * 100).round
end
def price_in_cents=(cents)
@price = cents / 100.0
end
使用p方法和puts方法
在Ruby中, p
方法和 puts
方法都可以用于输出对象的内容。但是,它们在处理对象时的行为不同。 p
方法调用对象的 inspect
方法,生成的输出对于开发者调试更有用;而 puts
方法则调用 to_s
方法,输出对象的字符串表示。
puts book
p book
总结与启发
通过学习本章内容,我们可以了解到在Ruby中创建类和管理对象状态的重要性。初始化方法的使用以及如何通过访问器方法来控制属性的读写权限,是构建健壮的面向对象程序的基础。
此外,我们还学到了如何利用Ruby语言提供的快捷方法,例如 attr_reader
、 attr_writer
和 attr_accessor
,这大大简化了对象属性的管理过程。理解这些概念对于在Ruby中高效编程至关重要。
通过阅读这一章,我们不仅获得了如何在Ruby中定义和使用类与对象的深入理解,而且还掌握了访问器方法的编写技巧,为编写可维护和可扩展的代码打下了坚实的基础。在未来的学习和编程实践中,这些知识将是我们宝贵的财富。