Ruby 2.7 の変更点 - 2.7.0-rc1

Ruby 2.7 アドベントカレンダーの18日目の記事です。

qiita.com

12/17 に Ruby 2.7.0-rc1 が出たので、2.7.0-preview3 との違いを見てみます。

パターンマッチングで例外

preview3 時点では case の中以外で使われた場合に真偽値を返しましたが、値を返さなくなり、マッチしなかった場合に case と同様に例外が発生するようになりました。

{a: 123} in {k: _}
#=> {:a=>123} (NoMatchingPatternError)

値を使おうとするとパース時にエラーになります。

x = ({a: 123} in {a: _})
#=> test.rb:1: void value expression

Regexp#match? に nil を渡してもOK

preview3 だと nil を渡すと warning が出るようになったのですが、

/xxx/.match? nil
#=> warning: given argument is nil; this will raise a TypeError in the next release

rc1 ではこの warning が出なくなりました。

/xxx/ =~ nil では warning が出なかったので、warning が出ると単純に match? に置き換えられないため…ということのようです。