我有一个类似于下面的课程,我们称之为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
这确实输出了文件。
答案 0 :(得分:0)
您可以使用BasicObject#instance_eval
或BasicObject#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