From: daniel@...42.com Date: 2020-03-09T14:39:09+00:00 Subject: [ruby-core:97422] [Ruby master Feature#16615] Group style access scope for macros Issue #16615 has been updated by Dan0042 (Daniel DeLorme). Description updated Maybe a more concrete example would be helpful: ```ruby def defc define_method(:c){ } end class Foo private def a; end attr_accessor :b defc end Foo.new.a #=> NoMethodError (private method `a' called) Foo.new.b #=> NoMethodError (private method `b' called) Foo.new.c #=> nil ``` Having `c` be declared as private may be desirable... but there's sure to be a compatibility impact. Is that why you added the condition that this should only happen if the meta-method (bar / defc) returns the instance method name (baz / c) as a symbol? ---------------------------------------- Feature #16615: Group style access scope for macros https://bugs.ruby-lang.org/issues/16615#change-84556 * Author: ted (Ted Johansson) * Status: Open * Priority: Normal ---------------------------------------- Given a method `.bar`, which defines an instance method `#baz` on a class, and returns the defined method's name as a symbol (`:baz`). ``` class Foo private # On evaluation defines a method and returns its name. # In current Ruby, that method will be public. The suggested # behaviour is to make it private, since the class method # which defines the instance method is in the private scope. # bar :baz end ``` it would be neat if the dynamically defined instance method respected the scope in which its definition originated. (In this particular case `private`.) Essentially the request is to extend the special powers of `attr_*` (being able to define methods that honour visibility scopes) to any method. Note: I am aware that inline access scopes already work for dynamically defined methods, as they merely accept a symbol as an argument. Edit: Changed `macro` to `bar` so people don't get hung up on the name of the method (which has no importance to the proposal.) -- https://bugs.ruby-lang.org/ Unsubscribe: