读书人

动态定义类变量跟类实例变量

发布时间: 2012-09-19 13:43:54 作者: rapoo

动态定义类变量和类实例变量

class Mine  attr_accessor :some_var  def intialize    @some_var = true  end  def my_number num    self.class.__send__(:attr_accessor, "my_#{num}")    self.__send__("my_#{num}=", num)  endenddude = Mine.newdude.my_number 1puts dude.my_1#=> 1#or  def my_number num     self.instance_variable_set "@my_#{num}", num     self.class.class_eval do        define_method("my_#{num}") { num }     end  end#orclass Mine  # ...  def my_number num    class << self      attr_accessor "my_#{num}"    end    self.send("my_#{num}=", num)  endend



class Widget  # class instance variable pattern  class << self; attr_accessor :color; end  def show_color()    "This widget is #{self.class.color}"  endendclass WidgetR < Widget  @color = "Russet"endclass WidgetC < Widget  @color = "Cordovan"endclass WidgetL < Widget  @color = "Liver"endWidgetR.new.show_color #=> "This widget is Russet"#orclass A  @count = 0  @@count = 0  def self.inherited(subclass)    subclass.instance_eval { @count = 0 }  end  def self.num_instances    @count  end  def self.num_subclass_instances    @@count  end  def self.new    @count += 1    @@count += 1    super  endendclass B < Aendclass C < BendA.newB.newA.newB.newB.newC.newA.num_instances #=> 2A.num_subclass_instances #=> 6B.num_instances #=> 3B.num_subclass_instances #=> 6C.num_instances #=> 1C.num_subclass_instances #=> 6

读书人网 >编程

热点推荐