我有一个名为 ProductImage 的类,它有一个名为'src'
的属性。该属性存储 ProductImage 的网址。
所以,我想创建一个用于操作图像的模块,这样我就可以操纵 ProductImages , LogoImages 等等。
这是我到目前为止所做的,但我很困惑:
module ImageManipulation
# Crop method
def crop
# First we need to have a MiniMagick instance so we can crop.
@minimagick = MiniMagick::Image.open(self.src) # Is this correct?
end
end
让我感到困惑的是,如果我们依赖于self.src
,这是混合模块的类的属性,那么如果这个模块混合在一个对象不响应{{1 }}?我该怎么做呢?
答案 0 :(得分:2)
让我感到困惑的是,如果我们依赖于
self.src
,这是混合模块的类的属性,那么如果这个模块混合在一个对象不响应{{1 }}?
然后你会得到一个self.src
,告诉用户你的模块到底出了什么问题。
我该如何处理?
你没有。该语言将通过提升NoMethodError
来为您解决此问题。
好吧,你不应该在代码中处理这个。但是你应该记录你的mixin的协议,如下所示:
NoMethodError
中混合的对象必须以ImageManipulation
的实例响应src
,表示要操作的图像的来源。
注意:URI
是Ruby中隐含的接收者,您无需明确指定它。