ブロックを利用したファイルのオープン、読み込み、クローズ
class File
def File.open_and_process(*args)
f = File.open(*args)
yield f
f.close
end
end
File.open_and_process("testfile.txt", "r") do |file|
while line = file.gets
puts line
end
end
ブロック呼び出し、ブロックなし呼び出しの判定 Kernel.block_given?
class File
def File.test_open(*args)
result = f = File.open(*args)
if block_given?
puts "block_given!!"
result = yield f
else
puts "no block_given..."
end
return result
end
end
ブロック付きで呼び出した場合 "block_given!!" が表示される
irb(main):125:0* File.test_open("testfile.txt", "r") do |file|
irb(main):126:1*
irb(main):127:1* while line = file.gets
irb(main):128:2> puts line
irb(main):129:2> end
irb(main):130:1> end
block_given!!
this is test
hello world!
=> nil
ブロックなしで呼び出した場合 "no block_given..." が表示される
irb(main):132:0* File.test_open("testfile.txt", "r")
no block_given...
=>