我正在處理「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
爲什麼要通過設置在其單獨的方法的對象變量的麻煩?
因爲您正在使用封裝。封裝意味着隔離變量並暴露訪問和修改它們的安全方法。 –
您可以覆蓋to_s方法並避免名爲name的方法,該方法僅用於將該對象表示爲文本。 – kainlite