Project

General

Profile

Actions

Feature #19573

closed

Add Class#singleton_inherited

Added by jeremyevans0 (Jeremy Evans) about 1 year ago. Updated about 1 year ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-core:113097]

Description

This would be similar to Class#inherited, but would be called with singleton classes of instances instead of subclasses. This could be used to warn or raise on singleton class creation, or modify the instance to change behavior, such as allow optimizations when a singleton class does not exist, but allow fallbacks if it does exist.

c = Class.new do
  def self.inherited(subclass)
    p :inherited
  end
  def self.singleton_inherited(singleton_class)
    # could use singleton_class.attached_object for modifying related object
    p :singleton_inherited
  end
end

Class.new(c)
# prints :inherited

c.new.singleton_class
# prints :singleton_inherited

This could potentially be an instance method (e.g. Kernel#singleton_class_created or BasicObject#singleton_class_created) instead of a class method. However, that would not grant any additional flexibility, since per-object behavior first requires creation of a singleton class.

If this is accepted, should the method be called for singleton classes created by Kernel#clone if the receiver has a singleton class? I think it should, as Class#inherited is called for Class#clone.


Related issues 1 (0 open1 closed)

Related to Ruby master - Feature #19538: Performance warningsClosedActions
Actions

Also available in: Atom PDF

Like1
Like0Like0Like0Like0Like0Like0