带块的ruby重构

带块的ruby重构,ruby,refactoring,block,Ruby,Refactoring,Block,我想重构这个代码片段,因为我们可以看到这里有很多重复。我们可以使用块重构来重构下面给出的代码吗 module Jobs SendTrackEvent = Struct.new(:user_id, :event, :properties) do include A include B def perform @tracker ||= Tracker.new(Settings.key) @tracker.track(user_id, event,

我想重构这个代码片段,因为我们可以看到这里有很多重复。我们可以使用块重构来重构下面给出的代码吗

module Jobs
  SendTrackEvent = Struct.new(:user_id, :event, :properties) do
    include A
    include B
    def perform
      @tracker ||= Tracker.new(Settings.key)
      @tracker.track(user_id, event, properties)
    end
  end

  SendAliasEvent = Struct.new(:new_distinct_id, :original_anonymous_id) do
    include A
    include B
    def perform
      @tracker ||= Tracker.new(Settings.key)
      @tracker.track(new_distinct_id, original_anonymous_id)
    end
  end
end
谢谢

这个答案已经删除了一段时间,看看是不是OP的草率让代码变得复杂;否则,就必须采取不同的解决办法。OP终于(在被指出四十分钟后,尽管是在线的)澄清了这一点,并解决了这个问题,所以这个答案又回来了。
:event
是否也显示
结构新(:new\u distinct\u id,:original\u anonymous\u id)
?我没有看到,但确认twiceNo:事件在第二个中不存在。我不确定,但我在其中一个评论中找到了另一个stackexchange站点。对于这样的问题,这可能是一个更好的地方。
module Jobs
  def self.create_struct(*args) do
    Struct.new(*args) do
      include A
      include B
      def perform
        @tracker ||= Tracker.new(Settings.key)
        @tracker.track(*args.map{|sym| send(sym)})
      end
    end
  end
  SendTrackEvent = create_struct(:user_id, :event, :properties)
  SendAliasEvent = create_struct(:new_distinct_id, :original_anonymous_id)
end