困ってたこと
下のコードでTempfileを作ろうとしていた
readメソッドで読むと'bar'という文字列が入っていて欲しかったがファイルの中を見ると空になっていた
file = Temfile.new('foo') do |f|
f << 'bar'
end
file
# => #<File:/var/folders//foo20191210-a8gjzw>
file.read
# => ''
fileは存在しているが中身が入ってないっぽい
解決策
そもそもFileの扱い方をわかってなかった
newはblockの中でpushしてもだめ
下のコードは動く
file = Temfile.new('foo')
file
# => #<File:/var/folders//foo20191210-a8gjzw>
file << 'bar'
file.rewind
file.read
# => 'bar'
変更を加えた時はrewindする必要があるっぽい
ちなみにcreateを使う時はblock文の中でfileを使った処理をするが必要あります
後から操作しようとするとエラーが出ます
file = Temfile.create('foo') do |f|
# fileを使った処理
end
file.read
#=> IOError: closed stream
結論
Tempfileの扱い方をわかってなかった、というかFileの扱いをわかってなかった
newはblockのなかでなんかしても意味ない