サンプルコードは参考リンクに豊富に載ってるので、ほぼ省略しています。
ローカル変数の shadowing 警告を削除
Effective Ruby の項目5で出てきたやつ、なくなったんですね。
to_h
がブロックを受け取れるように
['Hoge', 'Fuga'].to_h { |x| [x.upcase, x.downcase] }
みたいにブロック内で [key, value]
となるような配列を返すと、それを要素としたハッシュが生成される。
Enumerable#chain
, Enumerator#+
イテレータを連鎖させるやつ、便利そう。
Kernel#yield_self
の別名に Kernel#then
が導入された
そもそも Kernel#yield_self
を知らなかった…レシーバをブロック引数として、ブロックの結果がそのまま返り値になるやつ。
Object#tap
と似てるなーと思ったら、#tap
は self
を返すんですね。
ref. instance method Object#tap (Ruby 2.6.0)
:exception
オプションの導入
メソッドの実行失敗時に true
なら例外を吐かせ、false
なら nil
を返す。
Array#union
, Array#difference
これまで |
や -
演算子で実現していた配列の和集合と差集合を返すやつ、こちらは複数の引数を同時に取れる。
Hash#merge
, Hash#merge!
が複数の引数を受け取れるように
{k1: :v1}.merge({k2: :v2}).merge({k3: :v3})
と書かなくてよくなる。
String#split
がブロックを受け取れるように
ブロック引数には分割された部分文字列が順に渡される。ブロックを使った場合、 #split
メソッド自体の返り値はレシーバの文字列になるので注意が必要そう。
参考
プロと読み解く Ruby 2.6 NEWS ファイル - クックパッド開発者ブログ
サンプルコードでわかる!Ruby 2.6の主な新機能と変更点 - Qiita
ruby/NEWS at v2_6_0 · ruby/ruby · GitHub
おまけ
いろいろ調べてたら Ruby の Object クラスと Kernel モジュールの関係が曖昧になってきたので、ついでに整理。
以下の Kernel モジュールの要約がとてもよくまとまっている。
全てのクラスから参照できるメソッドを定義しているモジュール。 Object クラスはこのモジュールをインクルードしています。
Object クラスのメソッドは実際にはこのモジュールで定義されています。 これはトップレベルでのメソッドの再定義に対応するためです。