重新初始化Ruby对象

时间:2011-04-21 03:21:38

标签: ruby

我想知道我是否正确实现了Ruby对象的重新初始化。

我有一个名为Clipboard的类,用于保存文件夹和文件。创建新剪贴板对象时,它始终为空:没有文件夹或文件。我还有一个reset方法,可以清除剪贴板中的所有文件夹和文件。

起初我的代码看起来很喜欢这个:

class Clipboard
  def initialize
    @folders = []
    @files = []
  end

  def reset
    @folders = []
    @files = []
  end
end

但是resetinitialize完全一样的事实让我烦恼。除了重置剪贴板对象与重新初始化它相同。所以我将代码更改为:

class Clipboard
  def initialize
    @folders = []
    @files = []
  end

  def reset
    initialize
  end
end

这有效,但我想知道这是否是重新初始化对象的正确方法?我不应该从实例方法调用initialize吗?谢谢!

2 个答案:

答案 0 :(得分:4)

这段代码让我觉得有趣,因为从实例中调用构造函数似乎不是一种好习惯。我会简单地折射它:

class Clipboard
  def initialize
    setup
  end

  def reset
    setup
  end

  private

  def setup
    @folders = []
    @files = []
  end
end

答案 1 :(得分:1)

它有效,但有点不同寻常。您很可能希望为构造函数添加更多功能。可能更好的是使用私有方法实际上将数组清零,然后你的意图在代码中会更清晰:

class Clipboard
  def initialize
    [...]
    setup
    [...]
  end

  def reset
    setup
  end

  private

  def setup
     @folders, @files = [], []
  end
end