Forum: Ruby-core [ruby-trunk - Feature #8035][Open] singleton class should be included in ancestors

Posted by marcandre (Marc-Andre Lafortune) (Guest)
on 2013-03-06 17:52
(Received via mailing list)
Issue #8035 has been reported by marcandre (Marc-Andre Lafortune).

----------------------------------------
Feature #8035: singleton class should be included in ancestors
https://bugs.ruby-lang.org/issues/8035

Author: marcandre (Marc-Andre Lafortune)
Status: Open
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: current: 2.1.0


I feel it would be consistent if:

    k.ancestors.include?(k) #=> always true if k.is_a?(Class)

This is currently the case except for singleton classes:

    class << ""; include Enumerable; end.ancestors
    # => [Enumerable, String, Comparable, Object, Kernel, BasicObject]
    # would be more consistent:
    # => [#<Class:#<String:0x0000010113d268>>, Enumerable, String, 
Comparable, Object, Kernel, BasicObject]

Note that the singleton classes do appear in the ancestors if a module 
is instead prepended:

    class << ""; prepend Enumerable; end.ancestors
    # => [Enumerable, #<Class:#<String:0x0000010113d268>>, String, 
Comparable, Object, Kernel, BasicObject]

Thanks
Posted by alexeymuranov (Alexey Muranov) (Guest)
on 2013-03-06 20:22
(Received via mailing list)
Issue #8035 has been updated by alexeymuranov (Alexey Muranov).


Singleton class it the same thing as metaclass, right?  I feel it would 
be better to keep it invisible, and maybe in the future to remove it 
completely and to allow objects to keep their singleton methods 
themselves.
----------------------------------------
Feature #8035: singleton class should be included in ancestors
https://bugs.ruby-lang.org/issues/8035#change-37333

Author: marcandre (Marc-Andre Lafortune)
Status: Open
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: current: 2.1.0


I feel it would be consistent if:

    k.ancestors.include?(k) #=> always true if k.is_a?(Class)

This is currently the case except for singleton classes:

    class << ""; include Enumerable; end.ancestors
    # => [Enumerable, String, Comparable, Object, Kernel, BasicObject]
    # would be more consistent:
    # => [#<Class:#<String:0x0000010113d268>>, Enumerable, String, 
Comparable, Object, Kernel, BasicObject]

Note that the singleton classes do appear in the ancestors if a module 
is instead prepended:

    class << ""; prepend Enumerable; end.ancestors
    # => [Enumerable, #<Class:#<String:0x0000010113d268>>, String, 
Comparable, Object, Kernel, BasicObject]

Thanks
Posted by matz (Yukihiro Matsumoto) (Guest)
on 2013-03-07 14:21
(Received via mailing list)
Issue #8035 has been updated by matz (Yukihiro Matsumoto).


Agreed.  I will accept it unless any other compatibility problem raises.

Matz.

----------------------------------------
Feature #8035: singleton class should be included in ancestors
https://bugs.ruby-lang.org/issues/8035#change-37358

Author: marcandre (Marc-Andre Lafortune)
Status: Open
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: current: 2.1.0


I feel it would be consistent if:

    k.ancestors.include?(k) #=> always true if k.is_a?(Class)

This is currently the case except for singleton classes:

    class << ""; include Enumerable; end.ancestors
    # => [Enumerable, String, Comparable, Object, Kernel, BasicObject]
    # would be more consistent:
    # => [#<Class:#<String:0x0000010113d268>>, Enumerable, String, 
Comparable, Object, Kernel, BasicObject]

Note that the singleton classes do appear in the ancestors if a module 
is instead prepended:

    class << ""; prepend Enumerable; end.ancestors
    # => [Enumerable, #<Class:#<String:0x0000010113d268>>, String, 
Comparable, Object, Kernel, BasicObject]

Thanks
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.