Project

General

Profile

Feature #19520

Updated by ioquatix (Samuel Williams) over 1 year ago

See <https://bugs.ruby-lang.org/issues/19450> for previous discussion and motivation. 

 [This proposal](https://github.com/ruby/ruby/pull/7376) introduces the `name` parameter to `Class.new` and `Module.new`: 

 ```ruby 
 Class.new(superclass, name) 
 Module.new(name) 
 ``` 

 As a slight change, we could use keyword arguments instead. 

 ## Example usage 

 The current Ruby test suite has code which shows the usefulness of this new method: 

 ```ruby 
   def labeled_module(name, &block) 
     Module.new do 
       singleton_class.class_eval { 
         define_method(:to_s) {name} 
         alias inspect to_s 
         alias name to_s 
       } 
       class_eval(&block) if block 
     end 
   end 
   module_function :labeled_module 

   def labeled_class(name, superclass = Object, &block) 
     Class.new(superclass) do 
       singleton_class.class_eval { 
         define_method(:to_s) {name} 
         alias inspect to_s 
         alias name to_s 
       } 
       class_eval(&block) if block 
     end 
   end 
   module_function :labeled_class 
 ``` 

 The updated code would look like this: 

 ```ruby 
   def labeled_module(name, &block) 
     Module.new(name, &block) 
   end 

   def labeled_class(name, superclass = Object, &block) 
     Class.new(superclass, name, &block) 
   end 
   module_function :labeled_class 
 ```

Back