【问题标题】:Inheritable attributes in ruby classesruby 类中的可继承属性
【发布时间】:2011-04-16 17:47:27
【问题描述】:

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

# 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 天时间,但没有工作代码(

【问题讨论】:

    标签: ruby class attributes class-attributes inherited


    【解决方案1】:

    编辑:好的,试试这个:

    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]
    

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      相关资源
      最近更新 更多