RubyのTempfileの使い方、newとcreate
困ってたこと
下のコードで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のなかでなんかしても意味ない