💡

[Bug #20671] send 経由でブロック引数を渡した場合には警告を出さないようにする

2024/08/14に公開

[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) {}
GitHubで編集を提案

Discussion