Domanda

saluta tutti! Voglio descrivere ogni tipo di prodotto da una classe:

# Base product class
class BaseProduct
  prop :name, :price # Common properties for all inheritable products
end

class Cellphone < BaseProduct
  prop :imei # Concrete property for this product
end

class Auto < BaseProduct
  prop :max_speed, :color # Concrete properties for this product
end

c = Cellphone.new
c.prop_names # => [:name, :price, :imei]

a = Auto.new
c.prop_names # => [:name, :price, :max_speed, :color]

Quindi, come implementare questa? Ho trascorso 3 giorni su di esso, ma non ho ricevuto il codice di lavoro (

È stato utile?

Soluzione

Modifica : Va bene, provate questo:

class BaseProduct

  class << self
    def prop(*names)
      attr_accessor *names
      local_prop_names.push(*names)
    end

    def local_prop_names
      @local_prop_names ||= []
    end

    def prop_names
      if self == BaseProduct
        local_prop_names
      else
        superclass.prop_names + local_prop_names
      end
    end
  end

  def prop_names
    class << self; prop_names; end
  end
end

class BaseProduct
  prop :name
end

class Aero < BaseProduct
  prop :tricksy
end

class Heart < Aero
  prop :tiger
end

Aero.new.prop_names #=> [:name, :tricksy]
Heart.new.prop_names #=> [:name, :tricksy, :tiger]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top