我正在使用“Beginning Ruby”这本书,一切都很顺利,直到我进行封装为止。我明白这段代码在做什么,我只是不知道为什么它的方法是这样设置的。
感兴趣的人this is the link与书中关于封装的页面。
class Person
def initialize(name)
set_name(name)
end
def name
@first_name + ' ' + @last_name
end
def set_name(name)
first_name, last_name = name.split(/\s+/)
set_first_name(first_name)
set_last_name(last_name)
end
def set_first_name(name)
@first_name = name
end
def set_last_name(name)
@last_name = name
end
end
p = Person.new("Fred Bloggs")
puts p.name
在我看来,类似的东西可以达到同样的效果:
class Person
def initialize(name)
@first_name, @last_name = name.split(/\s+/)
end
def name
@first_name + ' ' + @last_name
end
end
p = Person.new("Fred Bloggs")
puts p.name
为什么要在单独的方法中设置对象变量呢?
最佳答案
Setter 方法对于修改已存在对象的状态很有用。在你的情况下,人的名字是“有点”不可变的。您无法更改人员的姓名,只能使用新名称创建新人员。
关于 ruby 封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722331/