Ruby 2.7 アドベントカレンダーの12日目の記事です。
rescue 節の優先度
代入文で後置 rescue を使用した時に多重代入の時だけ突飛な動きをしてましたが、
a = raise rescue 123 a #=> 123 a = raise rescue [123, 456] a #=> [123, 456] a = b = 0 a, b = raise rescue [123, 456] a #=> 0 ??? b #=> 0 ??? a = b = 0 a, b = (raise rescue [123, 456]) a #=> 123 b #=> 456
2.7 では期待通りに動くようになります。
a = b = 0 a, b = raise rescue [123, 456] a #=> 123 b #=> 456
特異クラス内定義の yield
今までメソッド内の特異クラス定義内の yield
がメソッドのコンテキストで実行されるという不思議な挙動をしていたようですが、warning が出るようになりました。
class A def hoge class << self yield #=> warning: `yield' in class syntax will not be supported from Ruby 3.0. [Feature #15575] end end end A.new.hoge { p 123 } #=> 123
warning の通り、3.0 ではサポートされなくなるようです。
ていうかこんなのに依存してるコードなんてないですよね、たぶん…。