我有一个关于我在一个例子上做过重构的问题。
以下是原始代码:
class Parts
attr_reader :parts
def initialize(parts)
@parts = parts
end
def size
parts.size
end
def spares
parts.select{|part| part.needs_spare}
end
end
以下是重构代码:
require 'forwardable'
class Parts
extend Forwardable
def_delegators :@parts, :size, :each
include Enumerable
def initialize(parts)
@parts = parts
end
def spares
select{|part| part.needs_spare}
end
end
在备用方法中,原始代码执行“parts.select {| part | part.needs_spare}”,然后在重构中将其调整为“select {| part | part.needs_spare}”。新的备用方法如何知道它从哪个实例变量中选择?
答案 0 :(得分:5)
select
为self.select
。self.select
,因为Enumerable
中的所有方法都使用self.each
。self.each
转发至@parts.each