💡
[Bug #20671] send 経由でブロック引数を渡した場合には警告を出さないようにする
[Bug #20671] Do not show "unused block" warning on send
- Ruby 3.4 で対応予定の『ブロック引数を利用していないメソッドにブロック引数を渡す対応』の話です
- 元々は
send
でメソッドを呼び出した場合にも対応していたんですがフレームワークによっては呼び出すメソッドがブロックを受け入れるかどうか難しいため無効にするとのこと - 実際に以下のような
test/unit
だと意図せず警告が出るらしいですね
require 'test/unit'
class T < Test::Unit::TestCase
def setup
end
def test_foo = nil
end
#=> /home/ko1/ruby/install/master/lib/ruby/gems/3.4.0+0/gems/test-unit-3.6.2/lib/test/unit/fixture.rb:284: warning: the block passed to 'priority_setup' defined at /home/ko1/ruby/install/master/lib/ruby/gems/3.4.0+0/gems/test-unit-3.6.2/lib/test/unit/priority.rb:183 may be ignored
- これはすでに開発版の Ruby 3.4 に取り込み済み
- ちなみに
public_send
は依然として警告が出ます
class X
def hoge
end
end
x = X.new
# no warning
x.send(:hoge) {}
# warning: the block passed to 'X#hoge' defined at test.rb:2 may be ignored
x.public_send(:hoge) {}
Discussion