Actions
Bug #13094
closedZlib::GzipReader eof?がfalseなのにgetsでnilが返ってくる
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.4.0preview2 (2016-09-09 trunk 56129) [x86_64-darwin15]
Tags:
Description
下記のように、eof?がfalseであればgetsでnilが返ってくることはないことを期待してるとエラーが起きてしまいます。
zlibでeof?は非推奨でしょうか?
require 'zlib'
o = ('!'..'~').to_a
i = 225
1000.times do
Zlib::GzipWriter.open('./s.gz') do |gz|
i.times do
gz.write(o.sample(10)*""+"\n")
end
end
Zlib::GzipReader.open("./s.gz") { |gz| puts gz.gets.chomp! until gz.eof? }
puts "#{i}, #{File.size('./s.gz')}"
if File.size('./s.gz') > 2058
i -= 1
else
i += 1
end
end
-:10:in `block (2 levels) in <main>': undefined method `chomp!' for nil:NilClass (NoMethodError)
from -:10:in `open'
from -:10:in `block in <main>'
from -:4:in `times'
from -:4:in `<main>'
Files
Updated by naruse (Yui NARUSE) about 7 years ago
たしかにFileとZlib::GzipReaderでeof?の挙動が違いますね。
Fileの方にあわせるべきかなぁ……。
さておき、現状こうなってしまっていますし、修正は2.5からだと思うのでgetsの戻り値で分岐した方がよいでしょうね。
Updated by jeremyevans0 (Jeremy Evans) over 3 years ago
I've added a pull request to zlib to document this difference in #gets behavior: https://github.com/ruby/zlib/pull/18
Updated by jeremyevans0 (Jeremy Evans) about 3 years ago
- Status changed from Open to Closed
Actions
Like0
Like0Like0Like0