From: matthew@... Date: 2017-05-25T17:43:26+00:00 Subject: [ruby-core:81385] [Ruby trunk Bug#13574] Method redefinition warning Issue #13574 has been updated by matthewd (Matthew Draper). > What do you mean? > That remove_method + new definition is not atomic? Yes. Using remove_method + define_method, a concurrent thread may get a NoMethodError. In contrast, using alias_method + define_method, while the other thread could obviously call either the old or new definition (depending on exact timing), there will always be *a* method there. ---------------------------------------- Bug #13574: Method redefinition warning https://bugs.ruby-lang.org/issues/13574#change-65094 * 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>