Ruby需求循环

卡梅伦·马丁(Cameron Martin)

我有以下代码(简化):

decorator.rb

require 'decoratable'

class Decorator < SimpleDelegator
  include Decoratable
end

decoratable.rb

require 'decorator_builder'

module Decoratable
  def decorate(*decorators)
    decorators.inject(DecoratorBuilder.new(self)) do |builder, decorator|
      builder.public_send(decorator)
    end.build
  end
end

decorator_builder.rb

require 'rare_decorator'

class DecoratorBuilder

  def initialize(card)
    @card = card
    @decorators = []
  end

  def rare
    @decorators << ->(card) { RareDecorator.new(card) }
    self
  end

  def build
    @decorators.inject(@card) do |card, decorator|
      decorator.call(card)
    end
  end

end

rare_decorator.rb

require 'decorator'

class RareDecorator < Decorator
  # Stuff here
end

当我需要decorator.rb时,它将导致在声明Decorator之前声明RareDecorator,这是一个问题,因为RareDecorator继承自Decorator。

一个可能的解决方案是像这样拆分decorator.rb:

class Decorator < SimpleDelegator; end

require 'decoratable'

class Decorator
  include Decoratable
end

但是,在文件中间声明依赖似乎对我来说似乎不是一个很干净的解决方案。

有没有更好的解决方案来解决这个问题?

BroiSatse

无需在每个文件中指定要求,而是创建一个将需要应用程序所有要求的文件。举个例子environment.rb

require 'decoratable'
require 'decorator'
require 'decorator_builder'
require 'rare_decorator'

您不必担心Decoratable不知道是什么DecoratorBuilder,因为它在方法中使用,并且在调用此方法时将执行对常量的检查。由于稍后需要装饰器,因此所有功能都可以使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章