[ruby-core:60441] [ruby-trunk - Feature #9453] Return symbols of defined methods for `attr` and friends

From: avdi@...
Date: 2014-02-04 05:22:31 UTC
List: ruby-core #60441
Issue #9453 has been updated by Avdi Grimm.


 There are a number of reasons I use them, but the most obvious is that a
 misspelled accessor method will raise NoMethod error, whereas a misspelled
 @ivar reference will silently return nil.
 
 
 
 On Mon, Feb 3, 2014 at 1:44 PM, <sawadatsuyoshi@gmail.com> wrote:
 
 > Issue #9453 has been updated by Tsuyoshi Sawada.
 >
 >
 > What is the point of defining a private accessor method? You can directly
 > refer to the instance variables without using accessors.
 >
 > ----------------------------------------
 > Feature #9453: Return symbols of defined methods for `attr` and friends
 > https://bugs.ruby-lang.org/issues/9453#change-44898
 >
 > * Author: Joshua Ballanco
 > * Status: Open
 > * Priority: Normal
 > * Assignee:
 > * 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)
 >
 >
 > --
 > http://bugs.ruby-lang.org/
 >
 
 
 
 -- 
 Avdi Grimm
 http://avdi.org
 
 I only check email twice a day. to reach me sooner, go to
 http://awayfind.com/avdi

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

* Author: Joshua Ballanco
* Status: Open
* Priority: Normal
* Assignee: 
* 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)


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

In This Thread

Prev Next