Project

General

Profile

Feature #12721

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

Hello ruby core, 

 This is about `module_function()`. module_function(). As the documentation rightfully 
  
 states, it adds a private method when included ("mixed in") into 
 a class. 

 The following code shows that this works: 

 ```ruby 
 

     module Foo 
   
       module_function 
   
       def hi 
     
         puts 'hi from method hi() in module Foo' 
   
       end 
 
     end 

 

     class Bar 
   
       include Foo 
   
       def test 
     
         hi 
   
       end 
 
     end 

 

     Bar.new.test # This works 
 
     Bar.new.hi     # This here leads to an error message "private method `hi' called" 
 ``` 

 I am sure that the private method by default makes sense, but 
 I wondered in those case where I would like the above to be 
 a public variant. 

 Is there some functionality like `module_function` module_function but that 
 works as a public method instead? So that the last example, 
 `Bar.new.hi`, Bar.new.hi, would also work? 

 Something like 

 ```ruby 
  

   public_module_function 
 ``` 

 If I would have a public variant, I assume that I could get rid of 
 "`def self.foo`" "def self.foo" statements in some of my modules. 

Back