我正在阅读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)
老实说,我看不出私有方法和受保护方法之间的区别,对我来说听起来是一样的。有人可以给我一个明确的解释,这样我就再也不会对此感到困惑了吗?
如有必要,我将提供第二个示例的代码。