Ruby 2.7 アドベントカレンダーの18日目の記事です。
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?
に置き換えられないため…ということのようです。