ブログ記事からの転載です。
クリスマス?知らないですねえ…。
と、言うことで Ruby 2.6 が無事にリリースされました。やったー!
そんなわけで気になった機能をいくつか上げてみようかと思います。
ちなみに Ruby 2.6 にパッチを10個ぐらい投げた結果 4つ取り込まれました。わーい。
Kernel#then
が Kernel#yield_self
のエイリアスとして追加
Kernel#yield_self
のエイリアスとして Kernel#then
が新しく追加されました。
yield_self
が then
と短く書けるやったー、と思う一方 then
って名前はどうなんですかね…という思いもあり…。
まあ文字数が半分以下になるのは喜ばしいこと。
Enumerable#filter
Enumerable#filter!
が追加
Enumerable#select
のエイリアスとして Enumerable#filter
が追加されました。
これで同機能の Enumerable
の絞り込みメソッドが
Enumerable#select
Enumerable#find_all
Enumerable#filter
の3つに増えました。
知らない人から見るとますます混乱しそうな気もしますが…。
Ruby をやり始めた頃は『なんで filter
がないんだよ』と思っていた思い出。
Proc#<<
、Proc#>>
が追加
Proc
にはいわゆる関数合成を行う演算子が新しく追加されました。
f = proc{|x| x + 2}
g = proc{|x| x * 3}
p (f << g).call(3) # -> 11; identical to f(g(3))
p (f >> g).call(3) # -> 15; identical to g(f(3))
f << g
は f(g())
になり、f >> g
は g(f())
になります。
また、Method
にも同等の演算子が追加されています。
f = proc{|x| x + 2}
g = proc{|x| x * 3}
p (1.method(:+) << 2.method(:*)).call(3) # => 7 (1 + (2 * 3))
p (1.method(:+) >> 2.method(:*)).call(3) # => 8 ((1 + 3) * 2)
# Proc と組み合わせたり
p (1.method(:+) << g).call(3) # => 10 ((3 * 3) + 1)
p (f >> 2.method(:+)).call(3) # => 7 ((3 + 2) + 2)
Proc#<<
、Proc#>>
ともに『#call
が定義されている』オブジェクトを渡すことが出来ます。
class G
def call x
x * 3
end
end
f = proc{|x| x + 2}
g = G.new
p (f << g).call(3) # => 11 f(g(3))
所感
と、いう感じで少しですが Ruby 2.6 の機能を取り上げてみました。
他には終端なし Range が追加されたり #to_h
にブロック引数が追加されたりなどなど。
気になる方はリリースノートを見てみるといいともいます。
さて、Ruby 2.6 がリリースされたということは Ruby 2.7 の開発が始まったことになります。
Ruby 2.6 ではパッチを10個投げた結果 4つ取り込まれました。
Ruby 2.7 でもまだまだ追加したい機能がたくさんあるので、Ruby 2.7 ではもう少しがんばってパッチを投げていきたいと思います。
あと直せる範囲であればバグ修正とかも手伝えるといいですねえ…。
そんな感じで来年も Ruby 2.7 を楽しみにしています!!