在运行时创建类
到目前为止,我们已经可以修改类并从现有类中创建新对象。但是你如何在运行时(runtime)创建一个全新的类呢?好吧,正如 const_get
可用于访问现有类一样,const_set
可用于创建新类。下面是一个示例,说明如何在创建该类之前提示用户输入新类的名称,向其中添加方法(myname
),创建该类的实例 x
,并调用其 myname
方法:
create_class.rb
puts("What shall we call this class? ")
className = gets.strip().capitalize()
Object.const_set(className, Class.new)
puts("I'll give it a method called 'myname'" )
className = Object.const_get(className)
className::module_eval{ define_method(:myname){
puts("The name of my class is '#{self.class}'" ) }
}
x = className.new
x.myname