我正在阅读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