オブジェクトの配列を調べ、そのオブジェクトを人物名で見つけ出し、クラスメソッドを使用してそのオブジェクトの年齢値を編集する方法を理解しようとしています。以下の例では、私が設定した.set_ageメソッドを使用して年齢を設定しようとしています。しかし、どのオブジェクトにも変更が返ってくるわけではありません。オブジェクトに正しくアクセスしていないためですが、その方法を理解することはできません。誰でもアレイのオブジェクトにアクセスし、その人の名前で人を見つけて年齢を設定するのを手助けできますか?Ruby - 複数のオブジェクトを持つ配列で年齢を設定する
class Person
attr_accessor :name, :age, :mood
def initialize(name, age, mood)
@name = name
@age = age
@mood = mood
end
def set_age(amount)
@age = amount
self
end
end
person1 = Person.new("John", 18, "happy")
person2 = Person.new("Jackie", 20, "happy")
person3 = Person.new("Charlie", 19, "sad")
persons_array = []
persons_array << person1
persons_array << person2
persons_array << person3
while true
p "1. Change persons age"
p "2. Exit"
choice = gets.chomp
case choice
when "1"
p "Name of person to change."
person_name = gets.chomp
p "What would you like to set their age to?"
person_age = gets.chomp.to_i
persons_array.each_with_index {|key, value|
if key == person_name
person_name.set_age(person_age)
p "changed #{person_name} age"
p persons_array
end
}
p persons_array
when "2"
break
end
end
私はあなたがそれはJavascriptで言うと無用「を実行し、コードスニペット」ボタンになり、あなたの質問では、これらのHTMLコメントを取り払うべきだと思います。 –
なぜあなたの 'age ='メソッドとほとんど同じ 'set_age'メソッドがありますか?なぜ 'age ='メソッドを使うのではないのですか? –
Jorgの書き換えについてどう思いますか? – brff19