我会尝试用外行的方式回答这个问题,因为我在开始时不明白这一点。
假设您希望Tweet
该类具有一个属性status
。现在您想更改该属性,因为它隐藏在类中,所以您不能。您可以与类中的任何内容进行交互的唯一方法是创建一个方法来执行此操作:
def status=(status)
@status = status # using @ makes @status a class instance variable, so you can interact with this attribute in other methods inside this class
end
伟大的!现在我可以这样做了:
tweet = Tweet.new
tweet.status = "200" # great this works
# now lets get the status back:
tweet.status # blows up!
我们无法访问该status
变量,因为我们还没有定义这样做的方法。
def status
@status # returns whatever @status is, will return nil if not set
end
现在tweet.status
也可以了。
有这方面的简写:
attr_setter :status #like the first method
attr_reader :status # like the second one
attr_accessor :status # does both of the above