質問を拡大する前に、ここ、ここ、ここの質問への回答を読んだことを述べさせてください。したがって、私の質問を重複としてマークしないように依頼しても、これらの回答ではattr_accessor
. 私の質問は、構文ではなくロジックに関係しています。
以下の 2 セットのコードを作成しました。attr_accessor
1 つのセットにラインがないことを除いて、セットは互いに同じです。両方のセットを実行すると、どちらも同じ出力が得られました。attr_accessor
では、論理的に言えば、両方のコード セットで同じ意図した出力が得られた場合、この行によってどのような違いが生じるのでしょうか?
コードセット 1:
class Animal
def initialize(name)
@name = name
end
end
class Cat < Animal
def talk
"Meaow!"
end
end
class Dog < Animal
def talk
"Woof!"
end
end
animals = [Cat.new("Flossie"), Dog.new("Clive"), Cat.new("Max")]
animals.each do |animal|
puts animal.talk
end
#Output:
#Meaow!
#Woof!
#Meaow!
コードセット 2:
class Animal
attr_accessor :name #this line is the only difference between the two code sets.
def initialize(name)
@name = name
end
end
class Cat < Animal
def talk
"Meaow!"
end
end
class Dog < Animal
def talk
"Woof!"
end
end
animals = [Cat.new("Flossie"), Dog.new("Clive"), Cat.new("Max")]
animals.each do |animal|
puts animal.talk
end
#Output:
#Meaow!
#Woof!
#Meaow!
どちらのコード セットも Animal クラスを呼び出して、名前付きの動物オブジェクトの新しいインスタンスを作成します。私は「...WITH Names」を強調しています。attr_accessor (2 番目のセット) が:name
属性を定義しているためです。しかし、最初のコード セットでは、 を削除しましたattr_accessor
が、name 属性を持つオブジェクト インスタンスを作成することができました。