Issue #12495 has been updated by Herwin Quarantainenet.


> Only `private`, not `public`, `protected` and `module_function`?

`private`, `public` and `protected` all use `set_visibility`, that's where the change is implemented, `private` was just used as an example. `module_function`/`rb_mod_modfunc` has not been updated, but that's an easy fix.


> How broken?

Something with the openssl tests. Travis showed them red as well, but thinks it's okay by now. The comment was intended to justify any file offsets, further discussion about it would be rather irrelevant to this case.

----------------------------------------
Feature #12495: Make "private" return the arguments again, for chaining
https://bugs.ruby-lang.org/issues/12495#change-59253

* Author: Herwin Quarantainenet
* Status: Feedback
* Priority: Normal
* Assignee: 
----------------------------------------
Ruby 2.1 introduced the feature to make `def foo` return the symbol, so this could be used by things like `private` (see #3753):

```ruby
private def foo() end
```

You could use the same method to create your own decorators (name borrowed from Python)

```ruby
def cached(name)
  # Rewrite method to include a cache
  return name
end

private cached def foo() end
```

Currently, this would work but `cached private def foo()` would not. `private` (and all other modifier functions) return the class on which it was called. It would be nice to exterminate those order-dependencies.


The attached patch fixes this. It includes three modes:

No arguments: return `nil`:

```ruby
private
  def foo() end
```

One argument: return the symbol. The would be the most common use case for this example.

```ruby
private def foo() end
private :bar
```

Multiple arguments: return an array of the arguments:

```ruby
private :foo, :bar
```

---Files--------------------------------
ruby_return_symbols_in_private.diff (1.19 KB)


-- 
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>