我有以下代码(简化):
decorator.rb
require 'decoratable'
class Decorator < SimpleDelegator
include Decoratable
enddecoratable.rb
require 'decorator_builder'
module Decoratable
def decorate(*decorators)
decorators.inject(DecoratorBuilder.new(self)) do |builder, decorator|
builder.public_send(decorator)
end.build
end
enddecorator_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
endrare_decorator.rb
require 'decorator'
class RareDecorator < Decorator
# Stuff here
end当我需要decorator.rb时,它会导致在声明RareDecorator之前声明RareDecorator,这是一个问题,因为RareDecorator是从Decorator继承的。
一个可能的解决方案是像这样拆分decorator.rb:
class Decorator < SimpleDelegator; end
require 'decoratable'
class Decorator
include Decoratable
end然而,对我来说,在文件中间声明依赖关系似乎并不是一个非常干净的解决方案。
这个问题有更好的解决办法吗?
发布于 2014-05-26 22:06:09
不要在每个文件中指定需求,而是创建一个需要所有应用程序需求的文件。例如,将其称为environment.rb
require 'decoratable'
require 'decorator'
require 'decorator_builder'
require 'rare_decorator'您不需要担心Decoratable不知道什么是DecoratorBuilder,因为它在方法中使用,调用该方法时将执行对常量的检查。因为你需要装饰片刻后,一切都会工作。
https://stackoverflow.com/questions/23877750
复制相似问题