From: Avdi Grimm Date: 2014-02-04T00:12:15-05:00 Subject: [ruby-core:60440] Re: [ruby-trunk - Feature #9453] Return symbols of defined methods for `attr` and friends --089e014941e631dc0c04f18db09d Content-Type: text/plain; charset=ISO-8859-1 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, 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 --089e014941e631dc0c04f18db09d Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
There are a number of reasons I use them, but the most obv= ious is that a misspelled accessor method will raise NoMethod error, wherea= s 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 r= efer 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 leave= s `attr`, `attr_reader`, `attr_writer`, and `attr_accessor` as ways to defi= ne 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 on= e 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 thi= s sample from James Edward Gray II's Warehouse Keeper example (https://git= hub.com/JEG2/warehouse_keeper):

=A0 =A0 attr_reader :images, :key_map, :window, :screen_manager, :animation= s
=A0 =A0 private =A0 =A0 :images, :key_map, :window, :screen_manager, :anima= tions

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

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

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

---Files--------------------------------
attr_rv.patch (3.23 KB)


--
http://bugs.ruby-l= ang.org/



--
= Avdi Grimm
http://avdi.org=

I only check email twice a day. to reach me sooner, go to http://awayfind.com/avdi<= /a>
--089e014941e631dc0c04f18db09d--