From: herwin@... Date: 2016-06-16T09:40:23+00:00 Subject: [ruby-core:76050] [Ruby trunk Feature#12495] Make "private" return the arguments again, for chaining 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: