私はBeginning Rubyを読んでいて、プライベートメソッドと保護されたメソッドに関する部分で立ち往生しています。これは初心者の質問です。SO を少し検索しましたが、プライベート メソッドと保護されたメソッドの違いについて、明確で初心者向けの説明を見つけることができませんでした。
この本では 2 つの例を示しています。最初の例はプライベート メソッドの場合です。
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)
正直なところ、プライベート メソッドと保護されたメソッドの違いがわかりません。同じように聞こえます。これについて二度と混乱しないように、誰かが明確な説明を提供してくれませんか?
必要に応じて、2 番目の例のコードを提供します。