Issue #13574 has been updated by matthewd (Matthew Draper).


As there's no other way to silence the redefinition warning (apart from removing the method first, which isn't atomic), the fact aliases silence it is very useful.

As a special case, aliasing it back to itself is particularly helpful for this purpose: it avoids polluting the method table with extra names, and is a clear indication we're not actually trying to give the method another name.

I don't know whether it was originally intended to work this way, but I think it is useful enough to keep. I also think a warning is unnecessary because it's not a likely error for a developer to make: there is no similar code that would make more sense.

----------------------------------------
Bug #13574: Method redefinition warning
https://bugs.ruby-lang.org/issues/13574#change-64885

* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.5.0dev (2017-03-22 gc-compact 58059) [x86_64-darwin16]
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
Hi,

If I redefine a method like this, I get a warning:

~~~ruby
class Foo
  def bar
  end
end

class Foo
  def bar
  end
end
~~~

If I alias the method to a different name, I don't get a warning:

~~~ruby
class Foo
  def bar
  end
end

class Foo
  alias :foo :bar

  def bar
  end
end
~~~

I think this is expected.  However, if I alias the method to itself, I don't get a warning:

~~~ruby
class Foo
  def bar
  end
end

class Foo
  alias :bar :bar

  def bar
  end
end
~~~

I think this case should cause a warning.

---Files--------------------------------
warn-on-same-name-alias.diff (425 Bytes)


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