3

向大家问好!我想用一个类来描述每一种产品:

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

那么,如何实现呢?我花了 3 天时间,但没有工作代码(

4

1 回答 1

3

编辑:好的,试试这个:

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]
于 2010-09-24T13:19:36.180 回答