[ruby-list:50359] CSV のコンバーターが nil に対して効かない
From:
"5.5" <5.5@...>
Date:
2016-07-25 12:52:54 UTC
List:
ruby-list #50359
5.5 です。
CSV のコンバーターの仕様が Ruby 2.1 → 2.2 で変わったんで
しょうか?
ダブルクオートで囲まれてない空フィールドを nil じゃなくて
空文字列にするため,いままで
->(s){s.to_s}
というコンバーターを使ってきました。
ところが,Ruby 2.2, 2.3, では,そもそも nil に対しては
コンバーターが働かないようで,nil のままになります。
再現コードは以下の通りです。
require "csv"
CSV.new(",foo", converters: ->(s){s.to_s}).each do |row|
p row
end
これで,
ruby 2.1.7p400 (2015-08-18 revision 51632) [i386-mingw32]
だと
["", "foo"]
になりますが,
ruby 2.2.5p319 (2016-04-26 revision 54774) [i386-mingw32]
だと
[nil, "foo"]
になっちゃいます。
公式リファンレスマニュアルを見ても,とくにこのあたりの仕様
変更についての記述が見当たりませんでした。
Ruby 2.2.0 のリリースノート
https://www.ruby-lang.org/ja/news/2014/12/25/ruby-2-2-0-released/
や NEWS
https://github.com/ruby/ruby/blob/v2_2_0/NEWS
にも「CSV」の文字が見当たりませんでした。
--
5.5@moji.gr.jp