如何使用Ruby中现有类的值创建新的类实例?

时间:2016-11-01 05:41:41

标签: ruby class methods instances

我试图了解如何在Ruby中的现有类中创建类的新实例。我在Stack Overflow上找到了一个例子,但是它并不清楚现有类的值是如何传递给新实例的。 (如果我使用的是术语权。)

在下面的示例中,我有两个类, RaceCar RaceDriver 。初始化时 RaceDriver 设置名称体验= 0 winnings = 0 并确保没有分配汽车爱好。

初始化时 RaceCar 设置汽车的类型 damage = 0 racing_status:ready ,并设置驱动程序

我想要做的是在 RaceDriver set_driverscar 中创建一个方法,为驱动程序创建一个汽车,创建 RaceCar.new 但是将驱动程序设置为 RaceDriver 名称。它是否处于初始化状态并不重要,我只想弄明白。

我将如何在下面的示例中执行此操作?

我一直在打扰这一点,我一定会错过一些明显的东西,但我无法弄明白或找到一个很好的例子来解释如何做到这一点?

你能帮我解答一下,这样我就可以了解到我在这里缺少什么吗?

class RaceDriver

  attr_accessor :name, :experience, :winnings, :car

  def initialize(attrs = {})
    set_name(attrs [:name])
    @experience = 0
    @winnings = 0
    @car = nil
  end

  private

  def set_name(obj)
    obj == nil ? no_name : @name = :name
  end

  def no_name
    raise 'There is no name for this driver'
  end

end

class RaceCar

  attr_accessor :racing_number, :type, :damage, :racing_status, :driver

  def initialize(attrs = {})
    @racing_number = generate_number
    @type = "stock"
    @damage = 0
    @racing_status = :ready
    set_driver(attrs[:driver])
  end

  def disable
    @racing_status = :disabled
  end

  private

  def generate_number
    rand(20..99)
  end

  def set_driver(obj)
    obj == nil ? no_driver : @driver = obj
  end

  def no_driver
    raise "A car has to have a driver to compete!"
  end

end

0 个答案:

没有答案