0

我需要调整以下块以创建基于@item.type. 为此,必须逐个更改块内容@item.type

list = Magick::ImageList.new(@item.images)
montage = list.montage do
  self.geometry = Magick::Geometry.new(130, 194, 10, 5)
  self.geometry = Magick::Geometry.new(4,10)
end
montage.write("name.jpg")

取决于@item.type以下方法可能需要也可能不需要,并且提供的值会有所不同:(例如,我可能需要self.foo但不需要self.geometry

self.geometry = Magick::Geometry.new(130, 194, 10, 5)
self.tiles = Magick::Geometry.new(4,10)

缺少if @item.type = 'this' ...什么“红宝石方式”来做到这一点?

4

1 回答 1

1

给项目一个方法来发射所需的几何类型怎么样?

montage = list.montage do
  self.geometry = Magick::Geometry.new(*@item.geometry)
end

然后你会有一个发出几何的方法:

def geometry
  [ 4, 10 ]
end

更新:使用演示者类型的类。

class Item
  def render_helper
    ItemRenderHelper.new(self)
  end
end

class ItemRenderHelper
  def initialize(item)
    @item = item
  end

  def render(context)
    context.geometry = Magick::Geometry.new(130, 194, 10, 5)
    context.tiles = Magick::Geometry.new(4, 10)
  end
end

class OtherItem
  def render_helper
    OtherItemRenderHelper.new(self)
  end
end

class OtherItemRenderHelper
  def initialize(other_item)
    @other_item = other_item
  end

  def render(context)
    context.geometry = Magick::Geometry.new(...)
    context.tiles = Magick::Geometry.new(...)
    context.other_method(...)
  end
end

然后你可以应用这些:

montage = list.montage do
  @item.render_helper.render(self)
end
于 2013-05-23T17:08:57.087 回答