内部初始化块时输出文件

时间:2015-03-12 20:15:44

标签: ruby

我有一个类似于下面的课程,我们称之为TestClass

class TestClass

  def output_files
    a = ("a".."j").to_a

    f1 = File.open("test.txt", "w")
    f2 = File.open("test2.txt", "w")
    a.each do |l|
      f1.write("#{l}\n"
      f2.write("#{l}\n")
    end
    f1.close
    f2.close
  end
end

如果我这样做:

t = TestClass.new do
  output_files
end

我希望这会输出两个文件,即使它会返回TestClass的实例。它不会输出任何文件。如何在这样的块内部输出文件?

如果我这样做:

t = TestClass.new
t.output_files

这确实输出了文件。

1 个答案:

答案 0 :(得分:0)

您可以使用BasicObject#instance_evalBasicObject#instance_exec

t = TestClass.new.instance_exec do
  output_files
  self
end

你也可以写TestClass#initialize来摆脱一些样板:

class TestClass
  def initialize(&blk)
    blk && initialize_exec(&blk)
  end
end
# ...
t = TestClass.new do
  output_files
end