Ruby2.6アドベントカレンダーの7日目の記事です。
Kernel
Kernel#then
追加
https://bugs.ruby-lang.org/issues/114594
Kernel#then
が Kernel#yield_self
の別名として追加されました。
RubyKaigi 2018 でまつもとさんが突然発表して物議を醸したアレです。
yield_self
は名前が悪いってことで別の名前が考えられてたみたいだけど、しかし then
か…。
メソッド名が動詞じゃないってのは別にこだわるところじゃないのかな。
Kernel#Complex
, Kernel#Float
, Kernel#Integer
, Kernel#Rational
に :exception
オプション追加
https://bugs.ruby-lang.org/issues/12732
exception: false
を指定すると例外を発生させる代わりに nil
が返ります。
Integer("hoge") #=> no implicit conversion of Hash into Integer (TypeError) Integer("hoge", exception: false) #=> nil
Kernel#system
に :exception
オプション追加
https://bugs.ruby-lang.org/issues/14386
exception: true
を指定するとコマンドが失敗した時に例外を発生させます。
system("false") #=> nil system("false", exception: true) #=> Command failed with exit 1: false (RuntimeError)
Kernel#system
と Kernel#exec
がファイルディスクリプタをクローズしない
https://bugs.ruby-lang.org/issues/14907
:close_others
オプションのデフォルトが false
になったようです。
と言っても Ruby 内でオープンしたファイルは O_CLOEXEC
つきでオープンされているため、exec 時には今まで通りクローズされます。
Ruby の外でオープンされたファイルディスクリプタが影響します。
2.5:
% ruby -e 'system("cat <&5")' 5< /etc/lsb-release sh: 1: 5: Bad file descriptor
2.6:
% ruby -e 'system("cat <&5")' 5< /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.10 DISTRIB_CODENAME=cosmic DISTRIB_DESCRIPTION="Ubuntu 18.10"