我有一个类似于下面的类,我们称之为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
这实际上会输出文件。
您可以使用
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