Ruby模块中的对象属性依赖项?

时间:2013-11-28 00:32:07

标签: ruby class module

我有一个名为 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 }}?我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

  

让我感到困惑的是,如果我们依赖于self.src,这是混合模块的类的属性,那么如果这个模块混合在一个对象不响应{{1 }}?

然后你会得到一个self.src,告诉用户你的模块到底出了什么问题。

  

我该如何处理?

你没有。该语言将通过提升NoMethodError来为您解决此问题。

好吧,你不应该在代码中处理这个。但是你应该记录你的mixin的协议,如下所示:

  

NoMethodError中混合的对象必须以ImageManipulation的实例响应src,表示要操作的图像的来源。

注意:URI是Ruby中隐含的接收者,您无需明确指定它。