2022/05/12 今回の気になった bugs.ruby のチケット

[Bug #18768] Inconsistent behavior of IO, StringIO and String each_line methods when return paragraph and chomp: true passed

"a\n\nb\n\nc\n".each_line("", chomp: true).to_a
#=> ["a\n", "b\n", "c\n"]

StringIO.new("a\n\nb\n\nc\n").each_line("", chomp: true).to_a
#=> ["a\n", "b\n", "c"]

File.open('chomp.txt').each_line("", chomp: true).to_a
#=> ["a", "b", "c\n"]
  • chomp.txt の中身
File.read('chomp.txt')
#=> "a\n\nb\n\nc\n"
  • String#each_line の挙動は以下の通り
# \n で区切りつつ末尾の \n を取り除く
p "a\n\nb\n\nc\n".each_line(chomp: true).to_a
#=> ["a", "", "b", "", "c"]

# `\n\n` 区切りで分割する
p "a\n\nb\n\nc\n".each_line("").to_a
#=> ["a\n\n", "b\n\n", "c\n"]
  • これはどれが期待する挙動になるんですかね…