我正在閱讀Beginning Ruby,我被困在有關私有和受保護方法的部分。我知道這是一個新手問題。我通過SO搜索了一下,但我無法找到一個清晰的,新手友好的解釋私人和受保護方法之間的區別。受保護的和私有的方法
書中給出兩個例子,用於私人的第一個方法:
class Person
def initialize(name)
set_name(name)
end
def name
@first_name + ' ' + @last_name
end
private
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")
p.set_last_name("Smith")
它會告訴我,我不能使用set_last_name方法,因爲它是私人的。一切都好,直到那裏。
然而,在其他的例子,他們定義了一個時代的方法保護,當我做
fred = Person.new(34)
chris = Person.new(25)
puts chris.age_difference_with(fred)
puts chris.age
它給出了一個錯誤:
:20: protected method 'age' called for #<Person:0x1e5f28 @age=25> (NoMethodError)
我真的看不到的區別私人和受保護的方法,這聽起來與我一樣。有人能給我提供一個清晰的解釋,所以我再也不會對此產生困惑嗎?
如果需要,我會提供第二個示例的代碼。
Checkout http://stackoverflow.com/questions/3534449/why-does-ruby-have-both-private-and-protected-methods – 2011-03-06 21:26:18