这是您正在寻找的答案Classes and methods
。仔细阅读。
这是来自链接的一个很好的文档:
类和方法
现在我们准备创建我们自己的地址类。让我们从简单的开始。让我们从只包含“街道”字段的地址开始。
这是定义类的方式:
class Address
def initialize(street)
@street = street
end
end
让我们来看看这个:
@street 是一个对象变量。类似于哈希的键。@ 符号将@street 区分为对象变量。每次创建 Address 类的对象时,该对象都将包含一个 @street 变量。
让我们使用这个类来创建一个地址对象。
address = Addres.new("23 St George St.")
而已。地址现在是类地址的对象读取对象中的数据
假设我们要读取地址对象中的数据。为此,我们需要编写一个返回此数据的方法:
class Address
def initialize(street)
@street = street
end
# Just return @street
def street
@street
end
end
现在,Address#street 方法可以让您读取地址所在的街道。在 irb 中:
>> address.street
=> "23 St George St."
对象的一个在外部可见的属性称为属性。在这种情况下,街道是一个属性。特别是,它是一个可读属性。因为这种属性很常见,Ruby 通过 attr_reader 关键字为您提供了一个快捷方式:
class Address
attr_reader :street
def initialize(street)
@street = street
end
end
更改对象中的数据
我们还可以定义一种方法来更改对象中的数据。
class Address
attr_reader :street
def initialize(street)
@street = street
end
def street=(street)
@street = street
end
end
Ruby 在使用 street= 方法时非常聪明:
address.street = "45 Main St."
请注意,您可以放置空间 betten street 和 =。现在我们可以更改地址数据,我们可以简化初始化方法,并将街道默认为空字符串“”。
class Address
attr_reader :street
def initialize
@street = ""
end
def street=(street)
@street = street
end
end
address = Address.new
address.street = "23 St George St."
这可能看起来不是很简单,但是当我们添加城市、州和邮政编码字段以及更多方法时,这将使类定义更简单一些。
现在,street 也是一个可写属性。和以前一样,您可以使用 attr_writer 声明它:
class Address
attr_reader :street
attr_writer :street
def initialize
@street = ""
end
end
访问数据
很多时候,您拥有既可读又可写的属性。Ruby 允许您将这些与 attr_accessor 混为一谈。我想这些将被称为“可访问属性”,但我从未见过它们被称为。
class Address
attr_accessor :street
def initialize
@street = ""
end
end
有了这些知识,现在很容易定义整个地址簿结构。事实证明,attr_accessor 和朋友都接受多个参数。
class Address
attr_accessor :street, :city, :state, :zip
def initialize
@street = @city = @state = @zip = ""
end
end