在运行时创建类

到目前为止,我们已经可以修改类并从现有类中创建新对象。但是你如何在运行时(runtime)创建一个全新的类呢?好吧,正如 const_get 可用于访问现有类一样,const_set 可用于创建新类。下面是一个示例,说明如何在创建该类之前提示用户输入新类的名称,向其中添加方法(myname),创建该类的实例 x,并调用其 myname 方法:

create_class.rb
  1. puts("What shall we call this class? ")
  2. className = gets.strip().capitalize()
  3. Object.const_set(className, Class.new)
  4. puts("I'll give it a method called 'myname'" )
  5. className = Object.const_get(className)
  6. className::module_eval{ define_method(:myname){
  7. puts("The name of my class is '#{self.class}'" ) }
  8. }
  9. x = className.new
  10. x.myname