Ruby语言本身有很多有趣的特性,比如可以将类重新打开进行修改,对类的修改会立刻反映到该类已经生成的对象上。举个例子:
#定义一个类
class TestClass
def initialize()
puts "initialize Ver 1"
end
end
#初始化一个对象,输出是:initialize Ver 1
a = TestClass.new
#打开TestClass,进行修改:重新定义构造函数initialize,增加一个函数fun1
class TestClass
def initialize()
puts "initialize Ver 2"
end
def fun1()
puts "fun1 invoked"
end
end
#初始化一个对象,输出是:initialize Ver 2
b = TestClass.new
#对a和b调用fun1,得到同样的输出:fun1 invoked
a.fun1
b.fun1
借助这种动态特性,可以实现很多有趣的功能。比如实现ORmapping时,在运行中为一个表生成一个类,并且生成了若干对象。如果表发生了变化,只需要利用这个特性对类进行修改,就可以确保对象与表的同步。
没有评论:
发表评论