Feature #8038

Keyword `object` to be used instead of `class <<`

Added by Alexey Muranov about 1 year ago. Updated about 1 year ago.

[ruby-core:53182]
Status:Rejected
Priority:Normal
Assignee:-
Category:core
Target version:Next Major

Description

=begin
I propose to introduce a new keyword (({object})) and to use it instead of the mysterious (({class <<})):

object foo
def bar
# ...
end
def baz
# ...
end
end

instead of

foo = Object.new
class << foo
def bar
# ...
end
def baz
# ...
end
end
=end

History

#1 Updated by David MacMahon about 1 year ago

As an alternative, how about allowing Object#extend to take a block that would be executed with the context such that methods defined therein would become singleton methods of the object receiving #extend?

Your example would then become:

foo = Object.new
foo.extend do
def bar
# ...
end
def baz
# ...
end
end

Sorry if this is impossible for some reason I don't know of,
Dave

On Mar 6, 2013, at 9:59 PM, alexeymuranov (Alexey Muranov) wrote:

Issue #8038 has been reported by alexeymuranov (Alexey Muranov).


Feature #8038: Keyword object to be used instead of class <<
https://bugs.ruby-lang.org/issues/8038

Author: alexeymuranov (Alexey Muranov)
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: Next Major

=begin
I propose to introduce a new keyword (({object})) and to use it instead of the mysterious (({class <<})):

object foo
def bar
# ...
end
def baz
# ...
end
end

instead of

foo = Object.new
class << foo
def bar
# ...
end
def baz
# ...
end
end
=end

http://bugs.ruby-lang.org/

#2 Updated by Yukihiro Matsumoto about 1 year ago

  • Status changed from Open to Rejected

Introducing a new keyword would break a lot of existing programs. We don't want to do unless there's strong requirement.
Making Object#extend to take a block is interesting idea. We will discuss later if it's submitted.

Matz.

#3 Updated by Thomas Sawyer about 1 year ago

@alexey I sympathize. I tend to avoid class << foo too b/c it "reads" so poorly.

@david Facets extends #extend to do that actually, but it does not add the the methods directly. Instead it creates an anonymous module which it includes into the singleton class. In this way it behaves the same as extending with a module.

#4 Updated by Matthew Kerwin about 1 year ago

matz (Yukihiro Matsumoto) wrote:

Introducing a new keyword would break a lot of existing programs. We don't want to do unless there's strong requirement.
Making Object#extend to take a block is interesting idea. We will discuss later if it's submitted.

Matz.

I'm interested in this discussion, including Facets' interpretation. I just created #8046

Also available in: Atom PDF