From: ko1@... Date: 2015-05-27T05:15:24+00:00 Subject: [ruby-core:69376] [Ruby trunk - Bug #11182] Refinement with alias causes strange behavior Issue #11182 has been updated by Koichi Sasada. File 1.PNG added File 2.PNG added I can consider two models (1) and (2) the following pictures show. ![(1)](1.png) ![(2)](2.png) I believe the implementation uses (2) model. For (1), calling M::C#bar is reasonable. For (2), calling M::C#bar is reasonable. Wow, both should be M::C#bar. Example on #5, both models should call M::C#bar. But my comment at #5 "C#bar should be same as C#foo" is wrong. ---------------------------------------- Bug #11182: Refinement with alias causes strange behavior https://bugs.ruby-lang.org/issues/11182#change-52651 * Author: Koichi Sasada * Status: Open * Priority: Normal * Assignee: Shugo Maeda * ruby -v: 2.3dev * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- The following script causes strange behavior. ```ruby class C def foo p "C" end end module M refine C do def foo p "Refiend C" end end end class D < C alias bar foo end using M D.new.bar #=> t.rb:21:in `
': undefined method `bar' for # (NoMethodError) ``` It seems strange. Maybe (1) C#foo or (2) M#C#foo should be called. But I'm not sure which is suitable. Previous versions: ``` ruby 2.0.0p606 (2014-11-28 revision 48636) [i386-mswin32_110] t.rb:9: warning: Refinements are experimental, and the behavior may change in future versions of Ruby! "C" ruby 2.1.5p312 (2015-03-10 revision 49912) [i386-mswin32_110] "C" ``` ---Files-------------------------------- 1.PNG (38.7 KB) 2.PNG (43.7 KB) -- https://bugs.ruby-lang.org/