ここでは、クラスメソッドを理解するのが苦労し、なぜインスタンスで正しく表示される属性を取得できないのですか。私はクラスメソッドcreate_with_attributes
を(animal.2上)を使用する場合クラスメソッド(ルビー)
class Animal
attr_accessor :noise, :color, :legs, :arms
def self.create_with_attributes(noise, color)
animal = self.new(noise)
@noise = noise
@color = color
return animal
end
def initialize(noise, legs=4, arms=0)
@noise = noise
@legs = legs
@arms = arms
puts "----A new animal has been instantiated.----"
end
end
animal1 = Animal.new("Moo!", 4, 0)
puts animal1.noise
animal1.color = "black"
puts animal1.color
puts animal1.legs
puts animal1.arms
puts
animal2 = Animal.create_with_attributes("Quack", "white")
puts animal2.noise
puts animal2.color
は、私はときに私puts animal2.color
"white"
が現れることを期待しています。
「ノイズ」があるようにattr_accessor
を使用して定義したようですが、ノイズは正しく表示されますが、色は正しく表示されません。このプログラムを実行するとエラーは発生しませんが、.color属性は表示されません。私はそれが何とか間違ってコードに表示されているためだと思います。
ご協力いただきありがとうございます。私は壁に向かって頭を叩いていたので、あなたは私にとってそれをとても明確にしました。とても有難い!!! –
私が正しく理解しているのは、noise属性がanimal.2に表示された理由よりも、インスタンス変数を設定していたInitializeメソッドで設定したためです。 –
'initialize'メソッドはノイズを必要とするので、' self.create_with_attributes'の 'animal.noise = noise'行は、すでに設定されているので実際には必要ありません。 – x1a4