我需要调整以下块来创建基于@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' ...
这样做的“Ruby方式”是什么?
答案 0 :(得分: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