I want to be able to initialize a new Car object and pass it a Person object in the parameters, so it can be saved in that Person’s @cars array. Currently, I take this approach:
person = Person.new("Michael")
car = Car.new("Honda", "Accord")
person.add_car(car)
person.add_car(Car.new("Ford", "Taurus"))
person.add_car(Car.new("Toyota", "Prius"))
person.display
However, I’d like to be able to create a new car instance and pass it the Person object I want it associated with. For example:
person = Person.new("Michael")
Car.new("Honda", "Accord", person)
Car.new("Toyota", "Camry", person)
Car.new("Chevy", "Tahoe", person)
person.display
Is that even possible?
class Person
attr_accessor :name
def initialize(name)
super
@name = name
@cars = []
end
def display
puts "#{@name} has #{@cars.length} cars"
puts "----------------------------"
@cars.each do |car|
puts "#{car.make} #{car.model}"
end
end
def add_car(car)
@cars.push(car)
end
end
class Car
attr_accessor :make, :model
def initialize(make, model)
@model = model
@make = make
end
def display
puts "#{@make} #{@model}"
end
end
Yes, that is possible,
Car#initializecan call methods on its arguments: