这是我第一次尝试使用ruby on rails,如果问题很明显,我很抱歉,但不幸的是,我在任何地方都找不到答案。

class Client < Person

  clientList = []

  def initialize(name, surname, email, wallet)
    super(name, surname, email)
    @wallet = wallet
  end

  attr_reader :wallet, :clientList

  def to_s
    super  + ", #{@wallet}"
  end

  def add_to_array
    clientList + this.object
    #i know its not correct
  end
end

我想创建方法,它允许我向clientlist数组添加client类的实例。以后还有什么选项可以在def initialize(name, surname, email, wallet)中使用这个方法。类似于this.add_to_array
我希望数组中包含所有客户端,但我不希望每次创建新客户端时都使用add_to_array方法。它应该是自动的。

最佳答案

要将客户机实例添加到clientList中,必须将clientList更改为至少类实例变量,为其添加访问器并调用add_to_array(我将其重命名为add_to_clients_list)来初始化方法,以便每次创建clientList实例时,Client都会更新:

class Client < Person

  @clientList = []

  class << self
    attr_accessor :clientList # add an accessor, so you can use Client.clientList
  end

  def initialize(name, surname, email, wallet)
    super(name, surname, email)
    @wallet = wallet
    add_to_array # call a method, that adds this created instance to array
  end

  attr_reader :wallet, :clientList

  def to_s
    super  + ", #{@wallet}"
  end

  def add_to_array
    self.class.clientList << self
  end
end

现在:
# create instance of Client
Client.new(1,2,3,4)
#<Client:0x007f873db25a68 @wallet=4>
# It is automatically added to `clientList`
Client.clientList
#=> [#<Client:0x007f873db25a68 @wallet=4>]

08-05 12:43