From: eregontp@... Date: 2019-01-10T09:16:00+00:00 Subject: [ruby-core:90984] [Ruby trunk Feature#6470][Open] Make attr_accessor return the list of generated method Issue #6470 has been updated by Eregon (Benoit Daloze). Status changed from Rejected to Open @matz There are use cases, see https://bugs.ruby-lang.org/issues/11539 and https://bugs.ruby-lang.org/issues/11541. Also, one case which has been IIRC frequently requested (mentioned just above in this issue, https://bugs.ruby-lang.org/issues/6470#note-4) is: ```ruby attr_reader :foo private attr_writer :foo ``` So one can use the symmetric `foo` and `foo=` in the class, but only the getter would be public. This is also useful to evolve `foo=` (e.g., to invalidate some caches if set) and add extra logic in it, without having to change all places from `@foo =` to `self.foo =`. I reopen because I think not all relevant issues have been considered. In general, I support this feature as it is a general and composable extension which enables many more things such as for `def` (decorators, debugging, concurrency, etc). ---------------------------------------- Feature #6470: Make attr_accessor return the list of generated method https://bugs.ruby-lang.org/issues/6470#change-76201 * Author: rupert (Robert Pankowecki) * Status: Open * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) * Target version: ---------------------------------------- attr_accesor currently returns nil. It would be more helpful if it return list of generated methods so that it can become an argument to other methods like :private or :protected. That way private accessors can still be defined at top of the class and be private without changing the visibility of next methods. class Something private *attr_accessor :user, :action # IMHO This is nice # private attr_accessor :user, :action # <-- would be even better if :private method accepted arrays def initialize(user, action) self.user = user self.action = action end def public_method user.do_something(action) end end VS class Something private; attr_accessor :user, :action; public # IMHO Hack!! def initialize(user, action) self.user = user self.action = action end def public_method user.do_something(action) end end VS class Something def initialize(user, action) self.user = user self.action = action end def public_method user.do_something(action) end private attr_accessor :user, :action # IMHO Does not look nice at bottom of the class definition end -- https://bugs.ruby-lang.org/ Unsubscribe: