From: shugo@... Date: 2016-06-28T01:49:12+00:00 Subject: [ruby-core:76165] [Ruby trunk Bug#12514] Refinements: when including Module as refinement, can't call other module methods Issue #12514 has been updated by Shugo Maeda. Tiago Cardoso wrote: > potatoe is not a variable, but a method call. The method is defined right after. That should be the whole point of it, right? The potatoe is defined in Extension, but String is only refined in the scope where using is called or the block of refine. The definition of Extensions#vegetables is out of either scope, and thus the method call of potatoe fails. ---------------------------------------- Bug #12514: Refinements: when including Module as refinement, can't call other module methods https://bugs.ruby-lang.org/issues/12514#change-59373 * Author: Tiago Cardoso * Status: Rejected * Priority: Normal * Assignee: * ruby -v: * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- Very simple script which reproduces the problem:
module Extensions
def vegetables ; potatoe ; end
def potatoe ; "potatoe" ; end
end
module Refinary
refine String do
# this doesn't work
include Extensions
# this would work...
# def vegetables ; potatoe ; end
# def potatoe ; "potatoe" ; end
end
end
using Refinary
puts "tomatoe".vegetables
#=> in `': undefined method `vegetables' for "tomatoe":String
failing from ruby 2.0 to 2.3
--
https://bugs.ruby-lang.org/
Unsubscribe: