From: okkez Date: 2016-07-26T09:12:26+09:00 Subject: [ruby-list:50360] Re: CSV のコンバーターが nil に対して効かない okkez です。 変わったのは↓のコミットみたいですね。 https://github.com/ruby/ruby/commit/7c4d4e1eb2897cec295ea9316835fc3cfef96d6d どこかでレポートされて直したらしいですが、どこでレポートされたのかまではわかりませんでした。 2016年7月25日 21:52 5.5 <5.5@moji.gr.jp>: > 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 -- okkez okkez000@gmail.com