Ruby 2.7 アドベントカレンダーの1日目の記事です。
Ruby は毎年クリスマスにバージョンが上がります。 今年も順調にいけば 12/25 に Ruby 2.7 がリリースされる予定です。
2.7 がリリースされるまで毎日少しずつ変更点を見ていきます。 ソースは NEWS(とか git log とか)です。
Ruby 2.7 までに復活したもの
キーワード引数のハッシュのシンボルでないキー
Ruby 2.6.0 で キーワード引数のハッシュのキーがシンボルでない場合はエラーになったんですが、2.6.2 でその挙動が取り消されてエラーにならなくなりました。 2.7 でもエラーにならないのですが、少し挙動が異なります。
def hoge(*a, **k) p a p k end # Ruby 2.5 hoge("a"=>1, b: 2) #=> [{"a"=>1}] #=> {:b=>2} # Ruby 2.6.0 hoge("a"=>1, b: 2) #=> non-symbol key in keyword arguments: "a" (ArgumentError) # Ruby 2.6.2 hoge("a"=>1, b: 2) #=> [{"a"=>1}] #=> {:b=>2} # Ruby 2.7 hoge("a"=>1, b: 2) #=> [] #=> {"a"=>1, :b=>2}
flip-flop 構文
2.6.0 で flip-flop が非推奨になり warning が出力されるようになったのですが、2.6.4 で復活しました。 実は結構使われてたってことみたいです。
# Ruby 2.5 10.times{|i| print i if (i==3)..(i==6)} #=> "3456" # Ruby 2.6.0 10.times{|i| print i if (i==3)..(i==6)} #=> warning: flip-flop is deprecated #=> "3456" # Ruby 2.6.4 10.times{|i| print i if (i==3)..(i==6)} #=> "3456" # Ruby 2.7 10.times{|i| print i if (i==3)..(i==6)} #=> "3456"
Ruby 2.7 で入りそうだったけど入らなかったもの
パイプライン演算子
.
と同じ働きをするけど .
よりも結合の優先度が低い |>
という演算子が入るかも…という話があったんですが結局入りませんでした。
2.7.0-preview1 から preview2 までの間に導入&削除されてます。
メソッド参照演算子
メソッドオブジェクトを取得する .:
演算子が 2.7.0-preview1 で入ったのですが、2.7.0-preview3 で削除されました。
method
メソッドで同様のことは可能です。
# Ruby 2.7.0-preview1 "123".:to_i #=> #<Method: String#to_i> # Ruby 2.7.0-preview3 "123".:to_i #=> syntax error, unexpected symbol literal "123".method(:to_i) #=> #<Method: String#to_i(*)>