Pregunta

saluda a todos! Quiero describir cada tipo de producto por una clase:

# 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]

Así que, cómo implementar esto? Me pasé 3 días en él, pero no tengo código de trabajo (

¿Fue útil?

Solución

Editar : Bien, intente esto:

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]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top