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


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)
end
end

dude = Mine.new
dude.my_number 1
puts 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
#or
class Mine
# ...
def my_number num
class << self
attr_accessor "my_#{num}"
end
self.send("my_#{num}=", num)
end
end




class Widget
# class instance variable pattern
class << self; attr_accessor :color; end

def show_color()
"This widget is #{self.class.color}"
end
end
class WidgetR < Widget
@color = "Russet"
end
class WidgetC < Widget
@color = "Cordovan"
end
class WidgetL < Widget
@color = "Liver"
end

WidgetR.new.show_color #=> "This widget is Russet"
#or
class 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
end
end
class B < A
end
class C < B
end

A.new
B.new
A.new
B.new
B.new
C.new

A.num_instances #=> 2
A.num_subclass_instances #=> 6
B.num_instances #=> 3
B.num_subclass_instances #=> 6
C.num_instances #=> 1
C.num_subclass_instances #=> 6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值