Val*_*Val 1 ruby oop composition
我有一个关于我在一个例子上做过重构的问题.
这是原始代码:
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
Run Code Online (Sandbox Code Playgroud)
这是重构的代码:
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
Run Code Online (Sandbox Code Playgroud)
在备用方法中,原始代码执行"parts.select {| part | part.needs_spare}",然后在重构中将其调整为"select {| part | part.needs_spare}".新的备用方法如何知道它从哪个实例变量中选择?
select是self.select.self.select,正如所有方法一样Enumerable,使用self.each.self.each 转发给 @parts.each