Issue #6470 has been updated by phluid61 (Matthew Kerwin).


In general I support this request, but in this proposed use-case ...

> ```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 =`.

`foo=` without `@` or `self.` will assign a local variable.  You'd have to change it to `foo=(...)` or `send :foo=, ...` anyway, no?


----------------------------------------
Feature #6470: Make attr_accessor return the list of generated method
https://bugs.ruby-lang.org/issues/6470#change-76209

* 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: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>