Issue #7998 has been updated by kernigh (George Koehler).
=begin
I have a problem with this feature.
module Frog
private def self.sound
"Ribbit!"
end
end
With this feature, def..end would return :sound, then private :sound would set Frog#sound to private. This is wrong. I defined Frog::sound, not Frog#sound. Surprise! There is no way for private :sound to know that I defined a metamethod, not an instance method; because def..end only returned a Symbol, not the whole definition. With this feature, "private def" only works for instance methods, not for metamethods.
=end
----------------------------------------
Feature #7998: "def" should return a value (the symbol of the method name) instead of nil
https://bugs.ruby-lang.org/issues/7998#change-37547
Author: pmarreck (Peter Marreck)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: next minor
The C code that implements Ruby method definitions already creates a symbol corresponding to the method name.
I propose that the "def... end" block returns this symbol.
This would allow the following elegant Ruby code:
protected def foo(); end
private def bar(); end
since "protected" and "private" already take symbol arguments.
I estimate that this would be extremely easy to implement while creating extremely minimal existing code impact.
I proposed this idea to the #ruby IRC channel on freenode.net and it was received very well, they encouraged me to file this ticket! Thank you for considering.
--
http://bugs.ruby-lang.org/