Project

General

Profile

This project is closed and read-only.

Actions

Backport #8284

closed

Expected behavior of Module#public_class_method

Backport #8284: Expected behavior of Module#public_class_method

Added by Anonymous over 13 years ago. Updated almost 9 years ago.

Status:
Closed
[ruby-core:54404]

Description

It was pointed out by Myron Marston (here: https://gist.github.com/myronmarston/5401829) that calling public_class_method on an anonymous module makes the named method public on Object, etc.

Object.define_method => NoMethodError
Module.new.public_class_method(:define_method)
Object.define_method => ArgumentError

Also of note, the same is not true when calling it on a class:

Object.define_method => NoMethodError
Class.new.public_class_method(:define_method)
Object.define_method => NoMethodError

which seems inconsistent given:

Module.new.singleton_class.ancestors => [Module, Object, Kernel, BasicObject]
Class.new.singleton_class.ancestors => [Class, Module, Object, Kernel, BasicObject]

Is this a bug or expected behavior? If the latter, what is the correct explanation?

Actions

Also available in: PDF Atom