Project

General

Profile

Feature #12721

public_module_function

Added by shevegen (Robert A. Heiler) almost 3 years ago. Updated over 2 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:77137]

Description

Hello ruby core,

This is about 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:

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 but that
works as a public method instead? So that the last example,
Bar.new.hi, would also work?

Something like

public_module_function

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

History

Updated by nobu (Nobuyoshi Nakada) almost 3 years ago

  • Description updated (diff)
class Bar
  include Foo
  public :hi
end

Updated by jwmittag (Jörg W Mittag) almost 3 years ago

If module_function returned its argument(s), we could write

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

But I'm not sure that's worth it. The whole point of "functions" is that they don't have receiver! Why would you want to call them with one?

Updated by matz (Yukihiro Matsumoto) over 2 years ago

  • Status changed from Open to Rejected

I understand your proposal, but I don't see what it is for.
Do you have any no-artificial use-case for this feature?
If you come up with real-world use-case, please re-open the issue.

Matz.

Also available in: Atom PDF