Forum: Ruby-core Return symbols of defined methods for `attr` and friends

45196398e9685000d195ec626d477f0e?d=identicon&s=25 Thomas Sawyer (7rans)
on 2014-04-11 21:48
(Received via mailing list)
Issue #9453 has been updated by Thomas Sawyer.


Letting #private accept an Array seems more preferable then adding yet
another ~~method~~ slew of methods: `private_attr_writer`,
`private_attr_accessor`, `protected_attr_reader`,
`protected_attr_writer`, `protected_attr_accessor`, ...



----------------------------------------
Feature #9453: Return symbols of defined methods for `attr` and friends
https://bugs.ruby-lang.org/issues/9453#change-46186

* Author: Joshua Ballanco
* Status: Rejected
* Priority: Normal
* Assignee: Yukihiro Matsumoto
* Category: core
* Target version:
----------------------------------------
With Ruby 2.1 returning a symbol from `def` and `define_method`, that
leaves `attr`, `attr_reader`, `attr_writer`, and `attr_accessor` as ways
to define methods that still return nil. This is unfortunate, because it
prevents the use of method decorators developed to work with `def` from
also working with the `attr*` methods. Because these mechanisms can
define more than one method, the return values would need to be arrays
of symbols.

For an example of how this could be useful in real-world code, consider
this sample from James Edward Gray II's Warehouse Keeper example
(https://github.com/JEG2/warehouse_keeper):

    attr_reader :images, :key_map, :window, :screen_manager, :animations
    private     :images, :key_map, :window, :screen_manager, :animations

if `attr_reader` returned symbols, then this could be simplified to:

    private *attr_reader(:images, :key_map, :window, :screen_manager,
:animations)

I've attached a patch that implements this change and includes a few
tests. For those who use git, I've also submitted this as a pull request
here: https://github.com/ruby/ruby/pull/517

---Files--------------------------------
attr_rv.patch (3.23 KB)
This topic is locked and can not be replied to.